Chromium Code Reviews| 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 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 165 void clearStencil(GLint); | 165 void clearStencil(GLint); |
| 166 void colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alp ha); | 166 void colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alp ha); |
| 167 void compileShader(WebGLShader*); | 167 void compileShader(WebGLShader*); |
| 168 | 168 |
| 169 void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, DOMArrayBufferView* data); | 169 void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, DOMArrayBufferView* data); |
| 170 void compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLin t yoffset, GLsizei width, GLsizei height, GLenum format, DOMArrayBufferView* dat a); | 170 void compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLin t yoffset, GLsizei width, GLsizei height, GLenum format, DOMArrayBufferView* dat a); |
| 171 | 171 |
| 172 void copyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); | 172 void copyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); |
| 173 void copyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoff set, GLint x, GLint y, GLsizei width, GLsizei height); | 173 void copyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoff set, GLint x, GLint y, GLsizei width, GLsizei height); |
| 174 | 174 |
| 175 PassRefPtrWillBeRawPtr<WebGLBuffer> createBuffer(); | 175 WebGLBuffer* createBuffer(); |
| 176 PassRefPtrWillBeRawPtr<WebGLFramebuffer> createFramebuffer(); | 176 WebGLFramebuffer* createFramebuffer(); |
| 177 PassRefPtrWillBeRawPtr<WebGLProgram> createProgram(); | 177 WebGLProgram* createProgram(); |
| 178 PassRefPtrWillBeRawPtr<WebGLRenderbuffer> createRenderbuffer(); | 178 WebGLRenderbuffer* createRenderbuffer(); |
| 179 PassRefPtrWillBeRawPtr<WebGLShader> createShader(GLenum type); | 179 WebGLShader* createShader(GLenum type); |
| 180 PassRefPtrWillBeRawPtr<WebGLTexture> createTexture(); | 180 WebGLTexture* createTexture(); |
| 181 | 181 |
| 182 void cullFace(GLenum mode); | 182 void cullFace(GLenum mode); |
| 183 | 183 |
| 184 void deleteBuffer(WebGLBuffer*); | 184 void deleteBuffer(WebGLBuffer*); |
| 185 virtual void deleteFramebuffer(WebGLFramebuffer*); | 185 virtual void deleteFramebuffer(WebGLFramebuffer*); |
| 186 void deleteProgram(WebGLProgram*); | 186 void deleteProgram(WebGLProgram*); |
| 187 void deleteRenderbuffer(WebGLRenderbuffer*); | 187 void deleteRenderbuffer(WebGLRenderbuffer*); |
| 188 void deleteShader(WebGLShader*); | 188 void deleteShader(WebGLShader*); |
| 189 void deleteTexture(WebGLTexture*); | 189 void deleteTexture(WebGLTexture*); |
| 190 | 190 |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 202 | 202 |
| 203 void enable(GLenum cap); | 203 void enable(GLenum cap); |
| 204 void enableVertexAttribArray(GLuint index); | 204 void enableVertexAttribArray(GLuint index); |
| 205 void finish(); | 205 void finish(); |
| 206 void flush(); | 206 void flush(); |
| 207 void framebufferRenderbuffer(GLenum target, GLenum attachment, GLenum render buffertarget, WebGLRenderbuffer*); | 207 void framebufferRenderbuffer(GLenum target, GLenum attachment, GLenum render buffertarget, WebGLRenderbuffer*); |
| 208 void framebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget , WebGLTexture*, GLint level); | 208 void framebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget , WebGLTexture*, GLint level); |
| 209 void frontFace(GLenum mode); | 209 void frontFace(GLenum mode); |
| 210 void generateMipmap(GLenum target); | 210 void generateMipmap(GLenum target); |
| 211 | 211 |
| 212 PassRefPtrWillBeRawPtr<WebGLActiveInfo> getActiveAttrib(WebGLProgram*, GLuin t index); | 212 WebGLActiveInfo* getActiveAttrib(WebGLProgram*, GLuint index); |
| 213 PassRefPtrWillBeRawPtr<WebGLActiveInfo> getActiveUniform(WebGLProgram*, GLui nt index); | 213 WebGLActiveInfo* getActiveUniform(WebGLProgram*, GLuint index); |
| 214 bool getAttachedShaders(WebGLProgram*, WillBeHeapVector<RefPtrWillBeMember<W ebGLShader>>&); | 214 bool getAttachedShaders(WebGLProgram*, HeapVector<Member<WebGLShader>>&); |
| 215 Nullable<WillBeHeapVector<RefPtrWillBeMember<WebGLShader>>> getAttachedShade rs(WebGLProgram*); | 215 Nullable<HeapVector<Member<WebGLShader>>> getAttachedShaders(WebGLProgram*); |
| 216 GLint getAttribLocation(WebGLProgram*, const String& name); | 216 GLint getAttribLocation(WebGLProgram*, const String& name); |
| 217 ScriptValue getBufferParameter(ScriptState*, GLenum target, GLenum pname); | 217 ScriptValue getBufferParameter(ScriptState*, GLenum target, GLenum pname); |
| 218 void getContextAttributes(Nullable<WebGLContextAttributes>&); | 218 void getContextAttributes(Nullable<WebGLContextAttributes>&); |
| 219 GLenum getError(); | 219 GLenum getError(); |
| 220 ScriptValue getExtension(ScriptState*, const String& name); | 220 ScriptValue getExtension(ScriptState*, const String& name); |
| 221 virtual ScriptValue getFramebufferAttachmentParameter(ScriptState*, GLenum t arget, GLenum attachment, GLenum pname); | 221 virtual ScriptValue getFramebufferAttachmentParameter(ScriptState*, GLenum t arget, GLenum attachment, GLenum pname); |
| 222 virtual ScriptValue getParameter(ScriptState*, GLenum pname); | 222 virtual ScriptValue getParameter(ScriptState*, GLenum pname); |
| 223 ScriptValue getProgramParameter(ScriptState*, WebGLProgram*, GLenum pname); | 223 ScriptValue getProgramParameter(ScriptState*, WebGLProgram*, GLenum pname); |
| 224 String getProgramInfoLog(WebGLProgram*); | 224 String getProgramInfoLog(WebGLProgram*); |
| 225 ScriptValue getRenderbufferParameter(ScriptState*, GLenum target, GLenum pna me); | 225 ScriptValue getRenderbufferParameter(ScriptState*, GLenum target, GLenum pna me); |
| 226 ScriptValue getShaderParameter(ScriptState*, WebGLShader*, GLenum pname); | 226 ScriptValue getShaderParameter(ScriptState*, WebGLShader*, GLenum pname); |
| 227 String getShaderInfoLog(WebGLShader*); | 227 String getShaderInfoLog(WebGLShader*); |
| 228 PassRefPtrWillBeRawPtr<WebGLShaderPrecisionFormat> getShaderPrecisionFormat( GLenum shaderType, GLenum precisionType); | 228 WebGLShaderPrecisionFormat* getShaderPrecisionFormat(GLenum shaderType, GLen um precisionType); |
| 229 String getShaderSource(WebGLShader*); | 229 String getShaderSource(WebGLShader*); |
| 230 Nullable<Vector<String>> getSupportedExtensions(); | 230 Nullable<Vector<String>> getSupportedExtensions(); |
| 231 virtual ScriptValue getTexParameter(ScriptState*, GLenum target, GLenum pnam e); | 231 virtual ScriptValue getTexParameter(ScriptState*, GLenum target, GLenum pnam e); |
| 232 ScriptValue getUniform(ScriptState*, WebGLProgram*, const WebGLUniformLocati on*); | 232 ScriptValue getUniform(ScriptState*, WebGLProgram*, const WebGLUniformLocati on*); |
| 233 PassRefPtrWillBeRawPtr<WebGLUniformLocation> getUniformLocation(WebGLProgram *, const String&); | 233 WebGLUniformLocation* getUniformLocation(WebGLProgram*, const String&); |
| 234 ScriptValue getVertexAttrib(ScriptState*, GLuint index, GLenum pname); | 234 ScriptValue getVertexAttrib(ScriptState*, GLuint index, GLenum pname); |
| 235 long long getVertexAttribOffset(GLuint index, GLenum pname); | 235 long long getVertexAttribOffset(GLuint index, GLenum pname); |
| 236 | 236 |
| 237 void hint(GLenum target, GLenum mode); | 237 void hint(GLenum target, GLenum mode); |
| 238 GLboolean isBuffer(WebGLBuffer*); | 238 GLboolean isBuffer(WebGLBuffer*); |
| 239 bool isContextLost() const override; | 239 bool isContextLost() const override; |
| 240 GLboolean isEnabled(GLenum cap); | 240 GLboolean isEnabled(GLenum cap); |
| 241 GLboolean isFramebuffer(WebGLFramebuffer*); | 241 GLboolean isFramebuffer(WebGLFramebuffer*); |
| 242 GLboolean isProgram(WebGLProgram*); | 242 GLboolean isProgram(WebGLProgram*); |
| 243 GLboolean isRenderbuffer(WebGLRenderbuffer*); | 243 GLboolean isRenderbuffer(WebGLRenderbuffer*); |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 364 | 364 |
| 365 void markLayerComposited() override; | 365 void markLayerComposited() override; |
| 366 ImageData* paintRenderingResultsToImageData(SourceDrawingBuffer) override; | 366 ImageData* paintRenderingResultsToImageData(SourceDrawingBuffer) override; |
| 367 | 367 |
| 368 void removeSharedObject(WebGLSharedObject*); | 368 void removeSharedObject(WebGLSharedObject*); |
| 369 void removeContextObject(WebGLContextObject*); | 369 void removeContextObject(WebGLContextObject*); |
| 370 | 370 |
| 371 unsigned maxVertexAttribs() const { return m_maxVertexAttribs; } | 371 unsigned maxVertexAttribs() const { return m_maxVertexAttribs; } |
| 372 | 372 |
| 373 // GL_CHROMIUM_subscribe_uniform | 373 // GL_CHROMIUM_subscribe_uniform |
| 374 PassRefPtrWillBeRawPtr<CHROMIUMValuebuffer> createValuebufferCHROMIUM(); | 374 CHROMIUMValuebuffer* createValuebufferCHROMIUM(); |
| 375 void deleteValuebufferCHROMIUM(CHROMIUMValuebuffer*); | 375 void deleteValuebufferCHROMIUM(CHROMIUMValuebuffer*); |
| 376 GLboolean isValuebufferCHROMIUM(CHROMIUMValuebuffer*); | 376 GLboolean isValuebufferCHROMIUM(CHROMIUMValuebuffer*); |
| 377 void bindValuebufferCHROMIUM(GLenum target, CHROMIUMValuebuffer*); | 377 void bindValuebufferCHROMIUM(GLenum target, CHROMIUMValuebuffer*); |
| 378 void subscribeValueCHROMIUM(GLenum target, GLenum subscription); | 378 void subscribeValueCHROMIUM(GLenum target, GLenum subscription); |
| 379 void populateSubscribedValuesCHROMIUM(GLenum target); | 379 void populateSubscribedValuesCHROMIUM(GLenum target); |
| 380 void uniformValuebufferCHROMIUM(const WebGLUniformLocation*, GLenum target, GLenum subscription); | 380 void uniformValuebufferCHROMIUM(const WebGLUniformLocation*, GLenum target, GLenum subscription); |
| 381 | 381 |
| 382 // Eagerly finalize WebGLRenderingContextBase in order for it | 382 // Eagerly finalize WebGLRenderingContextBase in order for it |
| 383 // to (first) be able to detach its WebGLContextObjects, before | 383 // to (first) be able to detach its WebGLContextObjects, before |
| 384 // they're later swept and finalized. | 384 // they're later swept and finalized. |
| 385 EAGERLY_FINALIZE(); | 385 EAGERLY_FINALIZE(); |
| 386 DECLARE_VIRTUAL_TRACE(); | 386 DECLARE_VIRTUAL_TRACE(); |
| 387 | 387 |
| 388 // Returns approximate gpu memory allocated per pixel. | 388 // Returns approximate gpu memory allocated per pixel. |
| 389 int externallyAllocatedBytesPerPixel() override; | 389 int externallyAllocatedBytesPerPixel() override; |
| 390 | 390 |
| 391 class TextureUnitState { | 391 class TextureUnitState { |
| 392 ALLOW_ONLY_INLINE_ALLOCATION(); | 392 ALLOW_ONLY_INLINE_ALLOCATION(); |
| 393 public: | 393 public: |
| 394 RefPtrWillBeMember<WebGLTexture> m_texture2DBinding; | 394 Member<WebGLTexture> m_texture2DBinding; |
| 395 RefPtrWillBeMember<WebGLTexture> m_textureCubeMapBinding; | 395 Member<WebGLTexture> m_textureCubeMapBinding; |
| 396 RefPtrWillBeMember<WebGLTexture> m_texture3DBinding; | 396 Member<WebGLTexture> m_texture3DBinding; |
| 397 RefPtrWillBeMember<WebGLTexture> m_texture2DArrayBinding; | 397 Member<WebGLTexture> m_texture2DArrayBinding; |
| 398 | 398 |
| 399 DECLARE_TRACE(); | 399 DECLARE_TRACE(); |
| 400 }; | 400 }; |
| 401 | 401 |
| 402 void setFilterQuality(SkFilterQuality) override; | 402 void setFilterQuality(SkFilterQuality) override; |
| 403 bool isWebGL2OrHigher() { return version() >= 2; } | 403 bool isWebGL2OrHigher() { return version() >= 2; } |
| 404 | 404 |
| 405 protected: | 405 protected: |
| 406 friend class WebGLDrawBuffers; | 406 friend class WebGLDrawBuffers; |
| 407 friend class WebGLFramebuffer; | 407 friend class WebGLFramebuffer; |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 473 // Dispatches a context lost event once it is determined that one is needed. | 473 // Dispatches a context lost event once it is determined that one is needed. |
| 474 // This is used for synthetic, WEBGL_lose_context and real context losses. F or real ones, it's | 474 // This is used for synthetic, WEBGL_lose_context and real context losses. F or real ones, it's |
| 475 // likely that there's no JavaScript on the stack, but that might be depende nt | 475 // likely that there's no JavaScript on the stack, but that might be depende nt |
| 476 // on how exactly the platform discovers that the context was lost. For bett er | 476 // on how exactly the platform discovers that the context was lost. For bett er |
| 477 // portability we always defer the dispatch of the event. | 477 // portability we always defer the dispatch of the event. |
| 478 Timer<WebGLRenderingContextBase> m_dispatchContextLostEventTimer; | 478 Timer<WebGLRenderingContextBase> m_dispatchContextLostEventTimer; |
| 479 bool m_restoreAllowed; | 479 bool m_restoreAllowed; |
| 480 Timer<WebGLRenderingContextBase> m_restoreTimer; | 480 Timer<WebGLRenderingContextBase> m_restoreTimer; |
| 481 | 481 |
| 482 bool m_markedCanvasDirty; | 482 bool m_markedCanvasDirty; |
| 483 WillBeHeapHashSet<RawPtrWillBeWeakMember<WebGLContextObject>> m_contextObjec ts; | 483 PersistentHeapHashSetWillBeHeapHashSet<WeakMember<WebGLContextObject>> m_con textObjects; |
|
Ken Russell (switch to Gerrit)
2015/08/01 00:11:56
Should we file a bug about removing this weak map?
peria
2015/08/03 09:00:36
I agree that the reference cycle will not make orp
| |
| 484 | 484 |
| 485 OwnPtrWillBeMember<WebGLRenderingContextLostCallback> m_contextLostCallbackA dapter; | 485 PersistentWillBeMember<WebGLRenderingContextLostCallback> m_contextLostCallb ackAdapter; |
| 486 OwnPtrWillBeMember<WebGLRenderingContextErrorMessageCallback> m_errorMessage CallbackAdapter; | 486 PersistentWillBeMember<WebGLRenderingContextErrorMessageCallback> m_errorMes sageCallbackAdapter; |
| 487 | 487 |
| 488 // List of bound VBO's. Used to maintain info about sizes for ARRAY_BUFFER a nd stored values for ELEMENT_ARRAY_BUFFER | 488 // List of bound VBO's. Used to maintain info about sizes for ARRAY_BUFFER a nd stored values for ELEMENT_ARRAY_BUFFER |
| 489 RefPtrWillBeMember<WebGLBuffer> m_boundArrayBuffer; | 489 PersistentWillBeMember<WebGLBuffer> m_boundArrayBuffer; |
| 490 | 490 |
| 491 RefPtrWillBeMember<WebGLVertexArrayObjectBase> m_defaultVertexArrayObject; | 491 PersistentWillBeMember<WebGLVertexArrayObjectBase> m_defaultVertexArrayObjec t; |
| 492 RefPtrWillBeMember<WebGLVertexArrayObjectBase> m_boundVertexArrayObject; | 492 PersistentWillBeMember<WebGLVertexArrayObjectBase> m_boundVertexArrayObject; |
| 493 void setBoundVertexArrayObject(PassRefPtrWillBeRawPtr<WebGLVertexArrayObject Base> arrayObject) | 493 void setBoundVertexArrayObject(WebGLVertexArrayObjectBase* arrayObject) |
| 494 { | 494 { |
| 495 if (arrayObject) | 495 if (arrayObject) |
| 496 m_boundVertexArrayObject = arrayObject; | 496 m_boundVertexArrayObject = arrayObject; |
| 497 else | 497 else |
| 498 m_boundVertexArrayObject = m_defaultVertexArrayObject; | 498 m_boundVertexArrayObject = m_defaultVertexArrayObject; |
| 499 } | 499 } |
| 500 | 500 |
| 501 enum VertexAttribValueType { | 501 enum VertexAttribValueType { |
| 502 Float32ArrayType, | 502 Float32ArrayType, |
| 503 Int32ArrayType, | 503 Int32ArrayType, |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 522 | 522 |
| 523 VertexAttribValueType type; | 523 VertexAttribValueType type; |
| 524 union { | 524 union { |
| 525 GLfloat floatValue[4]; | 525 GLfloat floatValue[4]; |
| 526 GLint intValue[4]; | 526 GLint intValue[4]; |
| 527 GLuint uintValue[4]; | 527 GLuint uintValue[4]; |
| 528 } value; | 528 } value; |
| 529 }; | 529 }; |
| 530 Vector<VertexAttribValue> m_vertexAttribValue; | 530 Vector<VertexAttribValue> m_vertexAttribValue; |
| 531 unsigned m_maxVertexAttribs; | 531 unsigned m_maxVertexAttribs; |
| 532 RefPtrWillBeMember<WebGLBuffer> m_vertexAttrib0Buffer; | 532 PersistentWillBeMember<WebGLBuffer> m_vertexAttrib0Buffer; |
| 533 long m_vertexAttrib0BufferSize; | 533 long m_vertexAttrib0BufferSize; |
| 534 GLfloat m_vertexAttrib0BufferValue[4]; | 534 GLfloat m_vertexAttrib0BufferValue[4]; |
| 535 bool m_forceAttrib0BufferRefill; | 535 bool m_forceAttrib0BufferRefill; |
| 536 bool m_vertexAttrib0UsedBefore; | 536 bool m_vertexAttrib0UsedBefore; |
| 537 | 537 |
| 538 RefPtrWillBeMember<WebGLProgram> m_currentProgram; | 538 PersistentWillBeMember<WebGLProgram> m_currentProgram; |
| 539 RefPtrWillBeMember<WebGLFramebuffer> m_framebufferBinding; | 539 PersistentWillBeMember<WebGLFramebuffer> m_framebufferBinding; |
| 540 RefPtrWillBeMember<WebGLRenderbuffer> m_renderbufferBinding; | 540 PersistentWillBeMember<WebGLRenderbuffer> m_renderbufferBinding; |
| 541 RefPtrWillBeMember<CHROMIUMValuebuffer> m_valuebufferBinding; | 541 PersistentWillBeMember<CHROMIUMValuebuffer> m_valuebufferBinding; |
| 542 | 542 |
| 543 GC_PLUGIN_IGNORE("crbug.com/496496") | 543 GC_PLUGIN_IGNORE("crbug.com/496496") |
| 544 WillBeHeapVector<TextureUnitState> m_textureUnits; | 544 PersistentHeapVectorWillBeHeapVector<TextureUnitState> m_textureUnits; |
| 545 unsigned long m_activeTextureUnit; | 545 unsigned long m_activeTextureUnit; |
| 546 | 546 |
| 547 RefPtrWillBeMember<WebGLTexture> m_blackTexture2D; | 547 PersistentWillBeMember<WebGLTexture> m_blackTexture2D; |
| 548 RefPtrWillBeMember<WebGLTexture> m_blackTextureCubeMap; | 548 PersistentWillBeMember<WebGLTexture> m_blackTextureCubeMap; |
| 549 | 549 |
| 550 Vector<GLenum> m_compressedTextureFormats; | 550 Vector<GLenum> m_compressedTextureFormats; |
| 551 | 551 |
| 552 // Fixed-size cache of reusable image buffers for video texImage2D calls. | 552 // Fixed-size cache of reusable image buffers for video texImage2D calls. |
| 553 class LRUImageBufferCache { | 553 class LRUImageBufferCache { |
| 554 public: | 554 public: |
| 555 LRUImageBufferCache(int capacity); | 555 LRUImageBufferCache(int capacity); |
| 556 // The pointer returned is owned by the image buffer map. | 556 // The pointer returned is owned by the image buffer map. |
| 557 ImageBuffer* imageBuffer(const IntSize& size); | 557 ImageBuffer* imageBuffer(const IntSize& size); |
| 558 private: | 558 private: |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 607 unsigned long m_onePlusMaxNonDefaultTextureUnit; | 607 unsigned long m_onePlusMaxNonDefaultTextureUnit; |
| 608 | 608 |
| 609 OwnPtr<Extensions3DUtil> m_extensionsUtil; | 609 OwnPtr<Extensions3DUtil> m_extensionsUtil; |
| 610 | 610 |
| 611 enum ExtensionFlags { | 611 enum ExtensionFlags { |
| 612 ApprovedExtension = 0x00, | 612 ApprovedExtension = 0x00, |
| 613 // Extension that is behind the draft extensions runtime flag: | 613 // Extension that is behind the draft extensions runtime flag: |
| 614 DraftExtension = 0x01, | 614 DraftExtension = 0x01, |
| 615 }; | 615 }; |
| 616 | 616 |
| 617 class ExtensionTracker : public NoBaseWillBeGarbageCollected<ExtensionTracke r> { | 617 class ExtensionTracker : public GarbageCollected<ExtensionTracker> { |
| 618 public: | 618 public: |
| 619 ExtensionTracker(ExtensionFlags flags, const char* const* prefixes) | 619 ExtensionTracker(ExtensionFlags flags, const char* const* prefixes) |
| 620 : m_draft(flags & DraftExtension) | 620 : m_draft(flags & DraftExtension) |
| 621 , m_prefixes(prefixes) | 621 , m_prefixes(prefixes) |
| 622 { | 622 { |
| 623 } | 623 } |
| 624 | 624 |
| 625 #if !ENABLE(OILPAN) | |
| 626 virtual ~ExtensionTracker() | |
| 627 { | |
| 628 } | |
| 629 #endif | |
| 630 | |
| 631 bool draft() const | 625 bool draft() const |
| 632 { | 626 { |
| 633 return m_draft; | 627 return m_draft; |
| 634 } | 628 } |
| 635 | 629 |
| 636 const char* const* prefixes() const; | 630 const char* const* prefixes() const; |
| 637 bool matchesNameWithPrefixes(const String&) const; | 631 bool matchesNameWithPrefixes(const String&) const; |
| 638 | 632 |
| 639 virtual PassRefPtrWillBeRawPtr<WebGLExtension> getExtension(WebGLRenderi ngContextBase*) = 0; | 633 virtual WebGLExtension* getExtension(WebGLRenderingContextBase*) = 0; |
| 640 virtual bool supported(WebGLRenderingContextBase*) const = 0; | 634 virtual bool supported(WebGLRenderingContextBase*) const = 0; |
| 641 virtual const char* extensionName() const = 0; | 635 virtual const char* extensionName() const = 0; |
| 642 virtual void loseExtension() = 0; | 636 virtual void loseExtension() = 0; |
| 643 | 637 |
| 644 DEFINE_INLINE_VIRTUAL_TRACE() { } | 638 DEFINE_INLINE_VIRTUAL_TRACE() { } |
| 645 | 639 |
| 646 private: | 640 private: |
| 647 bool m_draft; | 641 bool m_draft; |
| 648 const char* const* m_prefixes; | 642 const char* const* m_prefixes; |
| 649 }; | 643 }; |
| 650 | 644 |
| 651 template <typename T> | 645 template <typename T> |
| 652 class TypedExtensionTracker final : public ExtensionTracker { | 646 class TypedExtensionTracker final : public ExtensionTracker { |
| 653 public: | 647 public: |
| 654 static PassOwnPtrWillBeRawPtr<TypedExtensionTracker<T>> create(RefPtrWil lBeMember<T>& extensionField, ExtensionFlags flags, const char* const* prefixes) | 648 static TypedExtensionTracker<T>* create(PersistentWillBeMember<T>& exten sionField, ExtensionFlags flags, const char* const* prefixes) |
| 655 { | 649 { |
| 656 return adoptPtrWillBeNoop(new TypedExtensionTracker<T>(extensionFiel d, flags, prefixes)); | 650 return new TypedExtensionTracker<T>(extensionField, flags, prefixes) ; |
| 657 } | 651 } |
| 658 | 652 |
| 659 #if !ENABLE(OILPAN) | 653 WebGLExtension* getExtension(WebGLRenderingContextBase* context) overrid e |
| 660 ~TypedExtensionTracker() override | |
| 661 { | |
| 662 if (m_extension) { | |
| 663 m_extension->lose(true); | |
| 664 m_extension = nullptr; | |
| 665 } | |
| 666 } | |
| 667 #endif | |
| 668 | |
| 669 PassRefPtrWillBeRawPtr<WebGLExtension> getExtension(WebGLRenderingContex tBase* context) override | |
| 670 { | 654 { |
| 671 if (!m_extension) { | 655 if (!m_extension) { |
| 672 m_extension = T::create(context); | 656 m_extension = T::create(context); |
| 673 m_extensionField = m_extension; | 657 m_extensionField = m_extension; |
| 674 } | 658 } |
| 675 | 659 |
| 676 return m_extension; | 660 return m_extension; |
| 677 } | 661 } |
| 678 | 662 |
| 679 bool supported(WebGLRenderingContextBase* context) const override | 663 bool supported(WebGLRenderingContextBase* context) const override |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 695 } | 679 } |
| 696 } | 680 } |
| 697 | 681 |
| 698 DEFINE_INLINE_VIRTUAL_TRACE() | 682 DEFINE_INLINE_VIRTUAL_TRACE() |
| 699 { | 683 { |
| 700 visitor->trace(m_extension); | 684 visitor->trace(m_extension); |
| 701 ExtensionTracker::trace(visitor); | 685 ExtensionTracker::trace(visitor); |
| 702 } | 686 } |
| 703 | 687 |
| 704 private: | 688 private: |
| 705 TypedExtensionTracker(RefPtrWillBeMember<T>& extensionField, ExtensionFl ags flags, const char* const* prefixes) | 689 TypedExtensionTracker(PersistentWillBeMember<T>& extensionField, Extensi onFlags flags, const char* const* prefixes) |
| 706 : ExtensionTracker(flags, prefixes) | 690 : ExtensionTracker(flags, prefixes) |
| 707 , m_extensionField(extensionField) | 691 , m_extensionField(extensionField) |
| 708 { | 692 { |
| 709 } | 693 } |
| 710 | 694 |
| 711 RefPtrWillBeMember<T>& m_extensionField; | 695 PersistentWillBeMember<T>& m_extensionField; |
| 712 // ExtensionTracker holds it's own reference to the extension to ensure | 696 // ExtensionTracker holds it's own reference to the extension to ensure |
| 713 // that it is not deleted before this object's destructor is called | 697 // that it is not deleted before this object's destructor is called |
| 714 RefPtrWillBeMember<T> m_extension; | 698 Member<T> m_extension; |
| 715 }; | 699 }; |
| 716 | 700 |
| 717 bool m_extensionEnabled[WebGLExtensionNameCount]; | 701 bool m_extensionEnabled[WebGLExtensionNameCount]; |
| 718 WillBeHeapVector<OwnPtrWillBeMember<ExtensionTracker>> m_extensions; | 702 PersistentHeapVectorWillBeHeapVector<Member<ExtensionTracker>> m_extensions; |
| 719 | 703 |
| 720 template <typename T> | 704 template <typename T> |
| 721 void registerExtension(RefPtrWillBeMember<T>& extensionPtr, ExtensionFlags f lags = ApprovedExtension, const char* const* prefixes = 0) | 705 void registerExtension(PersistentWillBeMember<T>& extensionPtr, ExtensionFla gs flags = ApprovedExtension, const char* const* prefixes = nullptr) |
| 722 { | 706 { |
| 723 m_extensions.append(TypedExtensionTracker<T>::create(extensionPtr, flags , prefixes)); | 707 m_extensions.append(TypedExtensionTracker<T>::create(extensionPtr, flags , prefixes)); |
| 724 } | 708 } |
| 725 | 709 |
| 726 bool extensionSupportedAndAllowed(const ExtensionTracker*); | 710 bool extensionSupportedAndAllowed(const ExtensionTracker*); |
| 727 | 711 |
| 728 inline bool extensionEnabled(WebGLExtensionName name) | 712 inline bool extensionEnabled(WebGLExtensionName name) |
| 729 { | 713 { |
| 730 return m_extensionEnabled[name]; | 714 return m_extensionEnabled[name]; |
| 731 } | 715 } |
| (...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1046 static IntSize oldestContextSize(); | 1030 static IntSize oldestContextSize(); |
| 1047 }; | 1031 }; |
| 1048 | 1032 |
| 1049 DEFINE_TYPE_CASTS(WebGLRenderingContextBase, CanvasRenderingContext, context, co ntext->is3d(), context.is3d()); | 1033 DEFINE_TYPE_CASTS(WebGLRenderingContextBase, CanvasRenderingContext, context, co ntext->is3d(), context.is3d()); |
| 1050 | 1034 |
| 1051 } // namespace blink | 1035 } // namespace blink |
| 1052 | 1036 |
| 1053 WTF_ALLOW_MOVE_INIT_AND_COMPARE_WITH_MEM_FUNCTIONS(blink::WebGLRenderingContextB ase::TextureUnitState); | 1037 WTF_ALLOW_MOVE_INIT_AND_COMPARE_WITH_MEM_FUNCTIONS(blink::WebGLRenderingContextB ase::TextureUnitState); |
| 1054 | 1038 |
| 1055 #endif // WebGLRenderingContextBase_h | 1039 #endif // WebGLRenderingContextBase_h |
| OLD | NEW |