OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009 Apple Inc. All rights reserved. | 2 * Copyright (C) 2009 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 class WebGLDebugShaders; | 73 class WebGLDebugShaders; |
74 class WebGLDepthTexture; | 74 class WebGLDepthTexture; |
75 class WebGLExtension; | 75 class WebGLExtension; |
76 class WebGLFramebuffer; | 76 class WebGLFramebuffer; |
77 class WebGLLoseContext; | 77 class WebGLLoseContext; |
78 class WebGLObject; | 78 class WebGLObject; |
79 class WebGLProgram; | 79 class WebGLProgram; |
80 class WebGLRenderbuffer; | 80 class WebGLRenderbuffer; |
81 class WebGLShader; | 81 class WebGLShader; |
82 class WebGLSharedObject; | 82 class WebGLSharedObject; |
| 83 class WebGLSharedResources; |
83 class WebGLShaderPrecisionFormat; | 84 class WebGLShaderPrecisionFormat; |
84 class WebGLTexture; | 85 class WebGLTexture; |
85 class WebGLUniformLocation; | 86 class WebGLUniformLocation; |
86 class WebGLVertexArrayObjectOES; | 87 class WebGLVertexArrayObjectOES; |
87 | 88 |
88 typedef int ExceptionCode; | 89 typedef int ExceptionCode; |
89 | 90 |
90 class WebGLRenderingContext : public CanvasRenderingContext, public ActiveDOMObj
ect, private Page::MultisamplingChangedObserver { | 91 class WebGLRenderingContext : public CanvasRenderingContext, public ActiveDOMObj
ect, private Page::MultisamplingChangedObserver { |
91 public: | 92 public: |
92 static PassOwnPtr<WebGLRenderingContext> create(HTMLCanvasElement*, WebGLCon
textAttributes*); | 93 static PassOwnPtr<WebGLRenderingContext> create(HTMLCanvasElement*, WebGLCon
textAttributes*); |
93 virtual ~WebGLRenderingContext(); | 94 virtual ~WebGLRenderingContext(); |
94 | 95 |
95 virtual bool is3d() const { return true; } | 96 virtual bool is3d() const { return true; } |
96 virtual bool isAccelerated() const { return true; } | 97 virtual bool isAccelerated() const { return true; } |
97 | 98 |
98 int drawingBufferWidth() const; | 99 int drawingBufferWidth() const; |
99 int drawingBufferHeight() const; | 100 int drawingBufferHeight() const; |
100 | 101 |
| 102 unsigned contextIndex() const; |
| 103 unsigned resourceSyncCount() const; |
| 104 void flushResourceChanges(); |
| 105 |
101 void activeTexture(GC3Denum texture, ExceptionCode&); | 106 void activeTexture(GC3Denum texture, ExceptionCode&); |
102 void attachShader(WebGLProgram*, WebGLShader*, ExceptionCode&); | 107 void attachShader(WebGLProgram*, WebGLShader*, ExceptionCode&); |
103 void bindAttribLocation(WebGLProgram*, GC3Duint index, const String& name, E
xceptionCode&); | 108 void bindAttribLocation(WebGLProgram*, GC3Duint index, const String& name, E
xceptionCode&); |
104 void bindBuffer(GC3Denum target, WebGLBuffer*, ExceptionCode&); | 109 void bindBuffer(GC3Denum target, WebGLBuffer*, ExceptionCode&); |
105 void bindFramebuffer(GC3Denum target, WebGLFramebuffer*, ExceptionCode&); | 110 void bindFramebuffer(GC3Denum target, WebGLFramebuffer*, ExceptionCode&); |
106 void bindRenderbuffer(GC3Denum target, WebGLRenderbuffer*, ExceptionCode&); | 111 void bindRenderbuffer(GC3Denum target, WebGLRenderbuffer*, ExceptionCode&); |
107 void bindTexture(GC3Denum target, WebGLTexture*, ExceptionCode&); | 112 void bindTexture(GC3Denum target, WebGLTexture*, ExceptionCode&); |
108 void blendColor(GC3Dfloat red, GC3Dfloat green, GC3Dfloat blue, GC3Dfloat al
pha); | 113 void blendColor(GC3Dfloat red, GC3Dfloat green, GC3Dfloat blue, GC3Dfloat al
pha); |
109 void blendEquation(GC3Denum mode); | 114 void blendEquation(GC3Denum mode); |
110 void blendEquationSeparate(GC3Denum modeRGB, GC3Denum modeAlpha); | 115 void blendEquationSeparate(GC3Denum modeRGB, GC3Denum modeAlpha); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 String getShaderSource(WebGLShader*, ExceptionCode&); | 194 String getShaderSource(WebGLShader*, ExceptionCode&); |
190 Vector<String> getSupportedExtensions(); | 195 Vector<String> getSupportedExtensions(); |
191 WebGLGetInfo getTexParameter(GC3Denum target, GC3Denum pname, ExceptionCode&
); | 196 WebGLGetInfo getTexParameter(GC3Denum target, GC3Denum pname, ExceptionCode&
); |
192 WebGLGetInfo getUniform(WebGLProgram*, const WebGLUniformLocation*, Exceptio
nCode&); | 197 WebGLGetInfo getUniform(WebGLProgram*, const WebGLUniformLocation*, Exceptio
nCode&); |
193 PassRefPtr<WebGLUniformLocation> getUniformLocation(WebGLProgram*, const Str
ing&, ExceptionCode&); | 198 PassRefPtr<WebGLUniformLocation> getUniformLocation(WebGLProgram*, const Str
ing&, ExceptionCode&); |
194 WebGLGetInfo getVertexAttrib(GC3Duint index, GC3Denum pname, ExceptionCode&)
; | 199 WebGLGetInfo getVertexAttrib(GC3Duint index, GC3Denum pname, ExceptionCode&)
; |
195 long long getVertexAttribOffset(GC3Duint index, GC3Denum pname); | 200 long long getVertexAttribOffset(GC3Duint index, GC3Denum pname); |
196 | 201 |
197 void hint(GC3Denum target, GC3Denum mode); | 202 void hint(GC3Denum target, GC3Denum mode); |
198 GC3Dboolean isBuffer(WebGLBuffer*); | 203 GC3Dboolean isBuffer(WebGLBuffer*); |
199 bool isContextLost(); | 204 bool isContextLost() const; |
200 GC3Dboolean isEnabled(GC3Denum cap); | 205 GC3Dboolean isEnabled(GC3Denum cap); |
201 GC3Dboolean isFramebuffer(WebGLFramebuffer*); | 206 GC3Dboolean isFramebuffer(WebGLFramebuffer*); |
202 GC3Dboolean isProgram(WebGLProgram*); | 207 GC3Dboolean isProgram(WebGLProgram*); |
203 GC3Dboolean isRenderbuffer(WebGLRenderbuffer*); | 208 GC3Dboolean isRenderbuffer(WebGLRenderbuffer*); |
204 GC3Dboolean isShader(WebGLShader*); | 209 GC3Dboolean isShader(WebGLShader*); |
205 GC3Dboolean isTexture(WebGLTexture*); | 210 GC3Dboolean isTexture(WebGLTexture*); |
206 | 211 |
207 void lineWidth(GC3Dfloat); | 212 void lineWidth(GC3Dfloat); |
208 void linkProgram(WebGLProgram*, ExceptionCode&); | 213 void linkProgram(WebGLProgram*, ExceptionCode&); |
209 void pixelStorei(GC3Denum pname, GC3Dint param); | 214 void pixelStorei(GC3Denum pname, GC3Dint param); |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 void vertexAttrib4f(GC3Duint index, GC3Dfloat x, GC3Dfloat y, GC3Dfloat z, G
C3Dfloat w); | 298 void vertexAttrib4f(GC3Duint index, GC3Dfloat x, GC3Dfloat y, GC3Dfloat z, G
C3Dfloat w); |
294 void vertexAttrib4fv(GC3Duint index, Float32Array* values); | 299 void vertexAttrib4fv(GC3Duint index, Float32Array* values); |
295 void vertexAttrib4fv(GC3Duint index, GC3Dfloat* values, GC3Dsizei size); | 300 void vertexAttrib4fv(GC3Duint index, GC3Dfloat* values, GC3Dsizei size); |
296 void vertexAttribPointer(GC3Duint index, GC3Dint size, GC3Denum type, GC3Dbo
olean normalized, | 301 void vertexAttribPointer(GC3Duint index, GC3Dint size, GC3Denum type, GC3Dbo
olean normalized, |
297 GC3Dsizei stride, long long offset, ExceptionCode&)
; | 302 GC3Dsizei stride, long long offset, ExceptionCode&)
; |
298 | 303 |
299 void vertexAttribDivisorANGLE(GC3Duint index, GC3Duint divisor); | 304 void vertexAttribDivisorANGLE(GC3Duint index, GC3Duint divisor); |
300 | 305 |
301 void viewport(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height); | 306 void viewport(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height); |
302 | 307 |
| 308 long acquireSharedResource(WebGLSharedObject*, WebGLSharedObject::AcquireMod
e, PassRefPtr<WebGLAcquireSharedResourceCallback>, ExceptionCode&); |
| 309 void releaseSharedResource(WebGLSharedObject*, ExceptionCode&); |
| 310 void cancelAcquireSharedResource(long); |
| 311 |
303 // WEBKIT_lose_context support | 312 // WEBKIT_lose_context support |
304 enum LostContextMode { | 313 enum LostContextMode { |
305 // Lost context occurred at the graphics system level. | 314 // Lost context occurred at the graphics system level. |
306 RealLostContext, | 315 RealLostContext, |
307 | 316 |
308 // Lost context provoked by WEBKIT_lose_context. | 317 // Lost context provoked by WEBKIT_lose_context. |
309 SyntheticLostContext, | 318 SyntheticLostContext, |
310 | 319 |
311 // A synthetic lost context that should attempt to recover automatically | 320 // A synthetic lost context that should attempt to recover automatically |
312 AutoRecoverSyntheticLostContext | 321 AutoRecoverSyntheticLostContext |
(...skipping 14 matching lines...) Expand all Loading... |
327 | 336 |
328 void removeSharedObject(WebGLSharedObject*); | 337 void removeSharedObject(WebGLSharedObject*); |
329 void removeContextObject(WebGLContextObject*); | 338 void removeContextObject(WebGLContextObject*); |
330 | 339 |
331 unsigned getMaxVertexAttribs() const { return m_maxVertexAttribs; } | 340 unsigned getMaxVertexAttribs() const { return m_maxVertexAttribs; } |
332 | 341 |
333 // ActiveDOMObject notifications | 342 // ActiveDOMObject notifications |
334 virtual bool hasPendingActivity() const; | 343 virtual bool hasPendingActivity() const; |
335 virtual void stop(); | 344 virtual void stop(); |
336 | 345 |
| 346 enum ConsoleDisplayPreference { |
| 347 DisplayInConsole, |
| 348 DontDisplayInConsole |
| 349 }; |
| 350 |
| 351 // Wrapper for GraphicsContext3D::synthesizeGLError that sends a message |
| 352 // to the JavaScript console. |
| 353 void synthesizeGLError(GC3Denum, const char* functionName, const char* descr
iption, ConsoleDisplayPreference = DisplayInConsole); |
| 354 |
337 private: | 355 private: |
338 friend class WebGLDrawBuffers; | 356 friend class WebGLDrawBuffers; |
339 friend class WebGLFramebuffer; | 357 friend class WebGLFramebuffer; |
340 friend class WebGLObject; | 358 friend class WebGLObject; |
341 friend class OESVertexArrayObject; | 359 friend class OESVertexArrayObject; |
342 friend class WebGLDebugShaders; | 360 friend class WebGLDebugShaders; |
343 friend class WebGLCompressedTextureATC; | 361 friend class WebGLCompressedTextureATC; |
344 friend class WebGLCompressedTexturePVRTC; | 362 friend class WebGLCompressedTexturePVRTC; |
345 friend class WebGLCompressedTextureS3TC; | 363 friend class WebGLCompressedTextureS3TC; |
346 friend class WebGLRenderingContextErrorMessageCallback; | 364 friend class WebGLRenderingContextErrorMessageCallback; |
347 friend class WebGLVertexArrayObjectOES; | 365 friend class WebGLVertexArrayObjectOES; |
348 | 366 |
349 WebGLRenderingContext(HTMLCanvasElement*, PassRefPtr<GraphicsContext3D>, Gra
phicsContext3D::Attributes, GraphicsContext3D::Attributes); | 367 WebGLRenderingContext(HTMLCanvasElement*, PassRefPtr<GraphicsContext3D>, Gra
phicsContext3D::Attributes, GraphicsContext3D::Attributes, PassRefPtr<WebGLConte
xtGroup>); |
350 void initializeNewContext(); | 368 void initializeNewContext(); |
351 void setupFlags(); | 369 void setupFlags(); |
352 | 370 |
353 void addSharedObject(WebGLSharedObject*); | 371 void addSharedObject(WebGLSharedObject*); |
354 void addContextObject(WebGLContextObject*); | 372 void addContextObject(WebGLContextObject*); |
355 void detachAndRemoveAllObjects(); | 373 void detachAndRemoveAllObjects(); |
356 | 374 |
357 void destroyGraphicsContext3D(); | 375 void destroyGraphicsContext3D(); |
358 void markContextChanged(); | 376 void markContextChanged(); |
359 | 377 |
360 // Query if the GL implementation is NPOT strict. | 378 // Query if the GL implementation is NPOT strict. |
361 bool isGLES2NPOTStrict() { return m_isGLES2NPOTStrict; } | 379 bool isGLES2NPOTStrict() { return m_isGLES2NPOTStrict; } |
362 // Query if depth_stencil buffer is supported. | 380 // Query if depth_stencil buffer is supported. |
363 bool isDepthStencilSupported() { return m_isDepthStencilSupported; } | 381 bool isDepthStencilSupported() { return m_isDepthStencilSupported; } |
364 | 382 |
365 // Helper to return the size in bytes of OpenGL data types | 383 // Helper to return the size in bytes of OpenGL data types |
366 // like GL_FLOAT, GL_INT, etc. | 384 // like GL_FLOAT, GL_INT, etc. |
367 unsigned int sizeInBytes(GC3Denum type); | 385 unsigned int sizeInBytes(GC3Denum type); |
368 | 386 |
369 // Check if each enabled vertex attribute is bound to a buffer. | 387 // Check if each enabled vertex attribute is bound to a buffer. |
370 bool validateRenderingState(); | 388 bool validateRenderingState(const char*); |
371 | 389 |
372 bool validateWebGLObject(const char*, WebGLObject*); | 390 bool validateWebGLContextObject(const char*, WebGLContextObject*); |
| 391 bool validateWebGLSharedObject(const char*, WebGLSharedObject*, WebGLSharedO
bject::AcquireMode); |
373 | 392 |
374 // Adds a compressed texture format. | 393 // Adds a compressed texture format. |
375 void addCompressedTextureFormat(GC3Denum); | 394 void addCompressedTextureFormat(GC3Denum); |
376 void removeAllCompressedTextureFormats(); | 395 void removeAllCompressedTextureFormats(); |
377 | 396 |
| 397 WebGLBuffer* getBufferForTarget(const char* functionName, GC3Denum target); |
| 398 |
378 PassRefPtr<Image> videoFrameToImage(HTMLVideoElement*, BackingStoreCopy, Exc
eptionCode&); | 399 PassRefPtr<Image> videoFrameToImage(HTMLVideoElement*, BackingStoreCopy, Exc
eptionCode&); |
379 | 400 |
380 WebGLRenderbuffer* ensureEmulatedStencilBuffer(GC3Denum target, WebGLRenderb
uffer*); | 401 WebGLRenderbuffer* ensureEmulatedStencilBuffer(GC3Denum target, WebGLRenderb
uffer*); |
381 | 402 |
382 RefPtr<GraphicsContext3D> m_context; | 403 RefPtr<GraphicsContext3D> m_context; |
383 RefPtr<WebGLContextGroup> m_contextGroup; | 404 RefPtr<WebGLContextGroup> m_contextGroup; |
384 | 405 |
385 // Structure for rendering to a DrawingBuffer, instead of directly | 406 // Structure for rendering to a DrawingBuffer, instead of directly |
386 // to the back-buffer of m_context. | 407 // to the back-buffer of m_context. |
387 RefPtr<DrawingBuffer> m_drawingBuffer; | 408 RefPtr<DrawingBuffer> m_drawingBuffer; |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
520 RefPtr<OESVertexArrayObject> m_oesVertexArrayObject; | 541 RefPtr<OESVertexArrayObject> m_oesVertexArrayObject; |
521 RefPtr<OESElementIndexUint> m_oesElementIndexUint; | 542 RefPtr<OESElementIndexUint> m_oesElementIndexUint; |
522 RefPtr<WebGLLoseContext> m_webglLoseContext; | 543 RefPtr<WebGLLoseContext> m_webglLoseContext; |
523 RefPtr<WebGLDebugRendererInfo> m_webglDebugRendererInfo; | 544 RefPtr<WebGLDebugRendererInfo> m_webglDebugRendererInfo; |
524 RefPtr<WebGLDebugShaders> m_webglDebugShaders; | 545 RefPtr<WebGLDebugShaders> m_webglDebugShaders; |
525 RefPtr<WebGLDrawBuffers> m_webglDrawBuffers; | 546 RefPtr<WebGLDrawBuffers> m_webglDrawBuffers; |
526 RefPtr<WebGLCompressedTextureATC> m_webglCompressedTextureATC; | 547 RefPtr<WebGLCompressedTextureATC> m_webglCompressedTextureATC; |
527 RefPtr<WebGLCompressedTexturePVRTC> m_webglCompressedTexturePVRTC; | 548 RefPtr<WebGLCompressedTexturePVRTC> m_webglCompressedTexturePVRTC; |
528 RefPtr<WebGLCompressedTextureS3TC> m_webglCompressedTextureS3TC; | 549 RefPtr<WebGLCompressedTextureS3TC> m_webglCompressedTextureS3TC; |
529 RefPtr<WebGLDepthTexture> m_webglDepthTexture; | 550 RefPtr<WebGLDepthTexture> m_webglDepthTexture; |
| 551 RefPtr<WebGLSharedResources> m_webglSharedResources; |
530 | 552 |
531 class ExtensionTracker { | 553 class ExtensionTracker { |
532 public: | 554 public: |
533 ExtensionTracker(bool privileged, bool draft, bool prefixed, const char*
* prefixes) | 555 ExtensionTracker(bool privileged, bool draft, bool prefixed, const char*
* prefixes) |
534 : m_privileged(privileged) | 556 : m_privileged(privileged) |
535 , m_draft(draft) | 557 , m_draft(draft) |
536 , m_prefixed(prefixed) | 558 , m_prefixed(prefixed) |
537 , m_prefixes(prefixes) | 559 , m_prefixes(prefixes) |
538 { | 560 { |
539 } | 561 } |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
632 | 654 |
633 // Helpers for getParameter and others | 655 // Helpers for getParameter and others |
634 WebGLGetInfo getBooleanParameter(GC3Denum); | 656 WebGLGetInfo getBooleanParameter(GC3Denum); |
635 WebGLGetInfo getBooleanArrayParameter(GC3Denum); | 657 WebGLGetInfo getBooleanArrayParameter(GC3Denum); |
636 WebGLGetInfo getFloatParameter(GC3Denum); | 658 WebGLGetInfo getFloatParameter(GC3Denum); |
637 WebGLGetInfo getIntParameter(GC3Denum); | 659 WebGLGetInfo getIntParameter(GC3Denum); |
638 WebGLGetInfo getUnsignedIntParameter(GC3Denum); | 660 WebGLGetInfo getUnsignedIntParameter(GC3Denum); |
639 WebGLGetInfo getWebGLFloatArrayParameter(GC3Denum); | 661 WebGLGetInfo getWebGLFloatArrayParameter(GC3Denum); |
640 WebGLGetInfo getWebGLIntArrayParameter(GC3Denum); | 662 WebGLGetInfo getWebGLIntArrayParameter(GC3Denum); |
641 | 663 |
| 664 bool isAcquiredForModification(const char*, WebGLSharedObject*); |
| 665 bool isAcquiredForReading(const char*, WebGLSharedObject*); |
| 666 |
642 // Clear the backbuffer if it was composited since the last operation. | 667 // Clear the backbuffer if it was composited since the last operation. |
643 // clearMask is set to the bitfield of any clear that would happen anyway at
this time | 668 // clearMask is set to the bitfield of any clear that would happen anyway at
this time |
644 // and the function returns true if that clear is now unnecessary. | 669 // and the function returns true if that clear is now unnecessary. |
645 bool clearIfComposited(GC3Dbitfield clearMask = 0); | 670 bool clearIfComposited(GC3Dbitfield clearMask = 0); |
646 | 671 |
647 // Helper to restore state that clearing the framebuffer may destroy. | 672 // Helper to restore state that clearing the framebuffer may destroy. |
648 void restoreStateAfterClear(); | 673 void restoreStateAfterClear(); |
649 | 674 |
650 void texImage2DBase(GC3Denum target, GC3Dint level, GC3Denum internalformat,
GC3Dsizei width, GC3Dsizei height, GC3Dint border, GC3Denum format, GC3Denum ty
pe, const void* pixels, ExceptionCode&); | 675 void texImage2DBase(GC3Denum target, GC3Dint level, GC3Denum internalformat,
GC3Dsizei width, GC3Dsizei height, GC3Dint border, GC3Denum format, GC3Denum ty
pe, const void* pixels, ExceptionCode&); |
651 void texImage2DImpl(GC3Denum target, GC3Dint level, GC3Denum internalformat,
GC3Denum format, GC3Denum type, Image*, GraphicsContext3D::ImageHtmlDomSource,
bool flipY, bool premultiplyAlpha, ExceptionCode&); | 676 void texImage2DImpl(GC3Denum target, GC3Dint level, GC3Denum internalformat,
GC3Denum format, GC3Denum type, Image*, GraphicsContext3D::ImageHtmlDomSource,
bool flipY, bool premultiplyAlpha, ExceptionCode&); |
652 void texSubImage2DBase(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3D
int yoffset, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Denum type,
const void* pixels, ExceptionCode&); | 677 void texSubImage2DBase(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3D
int yoffset, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Denum type,
const void* pixels, ExceptionCode&); |
653 void texSubImage2DImpl(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3D
int yoffset, GC3Denum format, GC3Denum type, Image*, GraphicsContext3D::ImageHtm
lDomSource, bool flipY, bool premultiplyAlpha, ExceptionCode&); | 678 void texSubImage2DImpl(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3D
int yoffset, GC3Denum format, GC3Denum type, Image*, GraphicsContext3D::ImageHtm
lDomSource, bool flipY, bool premultiplyAlpha, ExceptionCode&); |
654 | 679 |
655 void handleTextureCompleteness(const char*, bool); | 680 bool handleTextureCompleteness(const char*, bool, bool*); |
656 void createFallbackBlackTextures1x1(); | 681 void createFallbackBlackTextures1x1(); |
657 | 682 |
658 // Helper function for copyTex{Sub}Image, check whether the internalformat | 683 // Helper function for copyTex{Sub}Image, check whether the internalformat |
659 // and the color buffer format of the current bound framebuffer combination | 684 // and the color buffer format of the current bound framebuffer combination |
660 // is valid. | 685 // is valid. |
661 bool isTexInternalFormatColorBufferCombinationValid(GC3Denum texInternalForm
at, | 686 bool isTexInternalFormatColorBufferCombinationValid(GC3Denum texInternalForm
at, |
662 GC3Denum colorBufferForm
at); | 687 GC3Denum colorBufferForm
at); |
663 | 688 |
664 // Helper function to get the bound framebuffer's color buffer format. | 689 // Helper function to get the bound framebuffer's color buffer format. |
665 GC3Denum getBoundFramebufferColorFormat(); | 690 GC3Denum getBoundFramebufferColorFormat(); |
(...skipping 11 matching lines...) Expand all Loading... |
677 // Generate GL error and return false for negative inputs; otherwise, return
true. | 702 // Generate GL error and return false for negative inputs; otherwise, return
true. |
678 bool validateSize(const char* functionName, GC3Dint x, GC3Dint y); | 703 bool validateSize(const char* functionName, GC3Dint x, GC3Dint y); |
679 | 704 |
680 // Helper function to check if all characters in the string belong to the | 705 // Helper function to check if all characters in the string belong to the |
681 // ASCII subset as defined in GLSL ES 1.0 spec section 3.1. | 706 // ASCII subset as defined in GLSL ES 1.0 spec section 3.1. |
682 bool validateString(const char* functionName, const String&); | 707 bool validateString(const char* functionName, const String&); |
683 | 708 |
684 // Helper function to check target and texture bound to the target. | 709 // Helper function to check target and texture bound to the target. |
685 // Generate GL errors and return 0 if target is invalid or texture bound is | 710 // Generate GL errors and return 0 if target is invalid or texture bound is |
686 // null. Otherwise, return the texture bound to the target. | 711 // null. Otherwise, return the texture bound to the target. |
687 WebGLTexture* validateTextureBinding(const char* functionName, GC3Denum targ
et, bool useSixEnumsForCubeMap); | 712 WebGLTexture* validateTextureBinding(const char* functionName, GC3Denum targ
et, bool useSixEnumsForCubeMap, WebGLSharedObject::AcquireMode); |
688 | 713 |
689 // Helper function to check input format/type for functions {copy}Tex{Sub}Im
age. | 714 // Helper function to check input format/type for functions {copy}Tex{Sub}Im
age. |
690 // Generates GL error and returns false if parameters are invalid. | 715 // Generates GL error and returns false if parameters are invalid. |
691 bool validateTexFuncFormatAndType(const char* functionName, GC3Denum format,
GC3Denum type, GC3Dint level); | 716 bool validateTexFuncFormatAndType(const char* functionName, GC3Denum format,
GC3Denum type, GC3Dint level); |
692 | 717 |
693 // Helper function to check input level for functions {copy}Tex{Sub}Image. | 718 // Helper function to check input level for functions {copy}Tex{Sub}Image. |
694 // Generates GL error and returns false if level is invalid. | 719 // Generates GL error and returns false if level is invalid. |
695 bool validateTexFuncLevel(const char* functionName, GC3Denum target, GC3Dint
level); | 720 bool validateTexFuncLevel(const char* functionName, GC3Denum target, GC3Dint
level); |
696 | 721 |
697 enum TexFuncValidationFunctionType { | 722 enum TexFuncValidationFunctionType { |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
786 // Helper function to validate blend equation mode. | 811 // Helper function to validate blend equation mode. |
787 bool validateBlendEquation(const char* functionName, GC3Denum); | 812 bool validateBlendEquation(const char* functionName, GC3Denum); |
788 | 813 |
789 // Helper function to validate blend func factors. | 814 // Helper function to validate blend func factors. |
790 bool validateBlendFuncFactors(const char* functionName, GC3Denum src, GC3Den
um dst); | 815 bool validateBlendFuncFactors(const char* functionName, GC3Denum src, GC3Den
um dst); |
791 | 816 |
792 // Helper function to validate a GL capability. | 817 // Helper function to validate a GL capability. |
793 bool validateCapability(const char* functionName, GC3Denum); | 818 bool validateCapability(const char* functionName, GC3Denum); |
794 | 819 |
795 // Helper function to validate input parameters for uniform functions. | 820 // Helper function to validate input parameters for uniform functions. |
| 821 bool validateUniformParameters(const char* functionName, const WebGLUniformL
ocation*); |
796 bool validateUniformParameters(const char* functionName, const WebGLUniformL
ocation*, Float32Array*, GC3Dsizei mod); | 822 bool validateUniformParameters(const char* functionName, const WebGLUniformL
ocation*, Float32Array*, GC3Dsizei mod); |
797 bool validateUniformParameters(const char* functionName, const WebGLUniformL
ocation*, Int32Array*, GC3Dsizei mod); | 823 bool validateUniformParameters(const char* functionName, const WebGLUniformL
ocation*, Int32Array*, GC3Dsizei mod); |
798 bool validateUniformParameters(const char* functionName, const WebGLUniformL
ocation*, void*, GC3Dsizei, GC3Dsizei mod); | 824 bool validateUniformParameters(const char* functionName, const WebGLUniformL
ocation*, void*, GC3Dsizei, GC3Dsizei mod); |
799 bool validateUniformMatrixParameters(const char* functionName, const WebGLUn
iformLocation*, GC3Dboolean transpose, Float32Array*, GC3Dsizei mod); | 825 bool validateUniformMatrixParameters(const char* functionName, const WebGLUn
iformLocation*, GC3Dboolean transpose, Float32Array*, GC3Dsizei mod); |
800 bool validateUniformMatrixParameters(const char* functionName, const WebGLUn
iformLocation*, GC3Dboolean transpose, void*, GC3Dsizei, GC3Dsizei mod); | 826 bool validateUniformMatrixParameters(const char* functionName, const WebGLUn
iformLocation*, GC3Dboolean transpose, void*, GC3Dsizei, GC3Dsizei mod); |
801 | 827 |
802 // Helper function to validate parameters for bufferData. | 828 // Helper function to validate parameters for bufferData. |
803 // Return the current bound buffer to target, or 0 if parameters are invalid
. | 829 // Return the current bound buffer to target, or 0 if parameters are invalid
. |
804 WebGLBuffer* validateBufferDataParameters(const char* functionName, GC3Denum
target, GC3Denum usage); | 830 WebGLBuffer* validateBufferDataParameters(const char* functionName, GC3Denum
target, GC3Denum usage); |
805 | 831 |
(...skipping 15 matching lines...) Expand all Loading... |
821 // Helper function to validate draw*Instanced calls | 847 // Helper function to validate draw*Instanced calls |
822 bool validateDrawInstanced(const char* functionName, GC3Dsizei primcount); | 848 bool validateDrawInstanced(const char* functionName, GC3Dsizei primcount); |
823 | 849 |
824 // Helper functions for vertexAttribNf{v}. | 850 // Helper functions for vertexAttribNf{v}. |
825 void vertexAttribfImpl(const char* functionName, GC3Duint index, GC3Dsizei e
xpectedSize, GC3Dfloat, GC3Dfloat, GC3Dfloat, GC3Dfloat); | 851 void vertexAttribfImpl(const char* functionName, GC3Duint index, GC3Dsizei e
xpectedSize, GC3Dfloat, GC3Dfloat, GC3Dfloat, GC3Dfloat); |
826 void vertexAttribfvImpl(const char* functionName, GC3Duint index, Float32Arr
ay*, GC3Dsizei expectedSize); | 852 void vertexAttribfvImpl(const char* functionName, GC3Duint index, Float32Arr
ay*, GC3Dsizei expectedSize); |
827 void vertexAttribfvImpl(const char* functionName, GC3Duint index, GC3Dfloat*
, GC3Dsizei, GC3Dsizei expectedSize); | 853 void vertexAttribfvImpl(const char* functionName, GC3Duint index, GC3Dfloat*
, GC3Dsizei, GC3Dsizei expectedSize); |
828 | 854 |
829 // Helper function for delete* (deleteBuffer, deleteProgram, etc) functions. | 855 // Helper function for delete* (deleteBuffer, deleteProgram, etc) functions. |
830 // Return false if caller should return without further processing. | 856 // Return false if caller should return without further processing. |
831 bool deleteObject(WebGLObject*); | 857 bool deleteContextObject(const char* functionName, WebGLContextObject*); |
| 858 bool deleteSharedObject(const char* functionName, WebGLSharedObject*); |
832 | 859 |
833 // Helper function for bind* (bindBuffer, bindTexture, etc) and useProgram. | 860 // Helper function for bind* (bindBuffer, bindTexture, etc) and useProgram. |
834 // If the object has already been deleted, set deleted to true upon return. | 861 // If the object has already been deleted, set deleted to true upon return. |
835 // Return false if caller should return without further processing. | 862 // Return false if caller should return without further processing. |
836 bool checkObjectToBeBound(const char* functionName, WebGLObject*, bool& dele
ted); | 863 bool checkContextObjectToBeBound(const char* functionName, WebGLContextObjec
t*, bool& deleted); |
| 864 bool checkSharedObjectToBeBound(const char* functionName, WebGLSharedObject*
, bool& deleted, bool& boundSinceLastAcquire); |
837 | 865 |
838 void dispatchContextLostEvent(Timer<WebGLRenderingContext>*); | 866 void dispatchContextLostEvent(Timer<WebGLRenderingContext>*); |
839 // Helper for restoration after context lost. | 867 // Helper for restoration after context lost. |
840 void maybeRestoreContext(Timer<WebGLRenderingContext>*); | 868 void maybeRestoreContext(Timer<WebGLRenderingContext>*); |
841 | 869 |
842 // Determine if we are running privileged code in the browser, for example, | 870 // Determine if we are running privileged code in the browser, for example, |
843 // a Safari or Chrome extension. | 871 // a Safari or Chrome extension. |
844 bool allowPrivilegedExtensions() const; | 872 bool allowPrivilegedExtensions() const; |
845 | 873 |
846 enum ConsoleDisplayPreference { | |
847 DisplayInConsole, | |
848 DontDisplayInConsole | |
849 }; | |
850 | |
851 // Wrapper for GraphicsContext3D::synthesizeGLError that sends a message | |
852 // to the JavaScript console. | |
853 void synthesizeGLError(GC3Denum, const char* functionName, const char* descr
iption, ConsoleDisplayPreference = DisplayInConsole); | |
854 | |
855 String ensureNotNull(const String&) const; | 874 String ensureNotNull(const String&) const; |
856 | 875 |
857 // Enable or disable stencil test based on user setting and | 876 // Enable or disable stencil test based on user setting and |
858 // whether the current FBO has a stencil buffer. | 877 // whether the current FBO has a stencil buffer. |
859 void applyStencilTest(); | 878 void applyStencilTest(); |
860 | 879 |
861 // Helper for enabling or disabling a capability. | 880 // Helper for enabling or disabling a capability. |
862 void enableOrDisable(GC3Denum capability, bool enable); | 881 void enableOrDisable(GC3Denum capability, bool enable); |
863 | 882 |
864 // Clamp the width and height to GL_MAX_VIEWPORT_DIMS. | 883 // Clamp the width and height to GL_MAX_VIEWPORT_DIMS. |
(...skipping 22 matching lines...) Expand all Loading... |
887 static void activateContext(WebGLRenderingContext*); | 906 static void activateContext(WebGLRenderingContext*); |
888 static void deactivateContext(WebGLRenderingContext*, bool addToInactiveList
); | 907 static void deactivateContext(WebGLRenderingContext*, bool addToInactiveList
); |
889 static void willDestroyContext(WebGLRenderingContext*); | 908 static void willDestroyContext(WebGLRenderingContext*); |
890 static void forciblyLoseOldestContext(const String& reason); | 909 static void forciblyLoseOldestContext(const String& reason); |
891 static IntSize oldestContextSize(); | 910 static IntSize oldestContextSize(); |
892 }; | 911 }; |
893 | 912 |
894 } // namespace WebCore | 913 } // namespace WebCore |
895 | 914 |
896 #endif | 915 #endif |
OLD | NEW |