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 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 void clearStencil(GLint); | 139 void clearStencil(GLint); |
140 void colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alp
ha); | 140 void colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alp
ha); |
141 void compileShader(WebGLShader*); | 141 void compileShader(WebGLShader*); |
142 | 142 |
143 void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat,
GLsizei width, GLsizei height, GLint border, ArrayBufferView* data); | 143 void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat,
GLsizei width, GLsizei height, GLint border, ArrayBufferView* data); |
144 void compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLin
t yoffset, GLsizei width, GLsizei height, GLenum format, ArrayBufferView* data); | 144 void compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLin
t yoffset, GLsizei width, GLsizei height, GLenum format, ArrayBufferView* data); |
145 | 145 |
146 void copyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint
x, GLint y, GLsizei width, GLsizei height, GLint border); | 146 void copyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint
x, GLint y, GLsizei width, GLsizei height, GLint border); |
147 void copyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoff
set, GLint x, GLint y, GLsizei width, GLsizei height); | 147 void copyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoff
set, GLint x, GLint y, GLsizei width, GLsizei height); |
148 | 148 |
149 PassRefPtr<WebGLBuffer> createBuffer(); | 149 PassRefPtrWillBeRawPtr<WebGLBuffer> createBuffer(); |
150 PassRefPtr<WebGLFramebuffer> createFramebuffer(); | 150 PassRefPtrWillBeRawPtr<WebGLFramebuffer> createFramebuffer(); |
151 PassRefPtr<WebGLProgram> createProgram(); | 151 PassRefPtrWillBeRawPtr<WebGLProgram> createProgram(); |
152 PassRefPtr<WebGLRenderbuffer> createRenderbuffer(); | 152 PassRefPtrWillBeRawPtr<WebGLRenderbuffer> createRenderbuffer(); |
153 PassRefPtr<WebGLShader> createShader(GLenum type); | 153 PassRefPtrWillBeRawPtr<WebGLShader> createShader(GLenum type); |
154 PassRefPtr<WebGLTexture> createTexture(); | 154 PassRefPtrWillBeRawPtr<WebGLTexture> createTexture(); |
155 | 155 |
156 void cullFace(GLenum mode); | 156 void cullFace(GLenum mode); |
157 | 157 |
158 void deleteBuffer(WebGLBuffer*); | 158 void deleteBuffer(WebGLBuffer*); |
159 void deleteFramebuffer(WebGLFramebuffer*); | 159 void deleteFramebuffer(WebGLFramebuffer*); |
160 void deleteProgram(WebGLProgram*); | 160 void deleteProgram(WebGLProgram*); |
161 void deleteRenderbuffer(WebGLRenderbuffer*); | 161 void deleteRenderbuffer(WebGLRenderbuffer*); |
162 void deleteShader(WebGLShader*); | 162 void deleteShader(WebGLShader*); |
163 void deleteTexture(WebGLTexture*); | 163 void deleteTexture(WebGLTexture*); |
164 | 164 |
(...skipping 11 matching lines...) Expand all Loading... |
176 | 176 |
177 void enable(GLenum cap); | 177 void enable(GLenum cap); |
178 void enableVertexAttribArray(GLuint index); | 178 void enableVertexAttribArray(GLuint index); |
179 void finish(); | 179 void finish(); |
180 void flush(); | 180 void flush(); |
181 void framebufferRenderbuffer(GLenum target, GLenum attachment, GLenum render
buffertarget, WebGLRenderbuffer*); | 181 void framebufferRenderbuffer(GLenum target, GLenum attachment, GLenum render
buffertarget, WebGLRenderbuffer*); |
182 void framebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget
, WebGLTexture*, GLint level); | 182 void framebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget
, WebGLTexture*, GLint level); |
183 void frontFace(GLenum mode); | 183 void frontFace(GLenum mode); |
184 void generateMipmap(GLenum target); | 184 void generateMipmap(GLenum target); |
185 | 185 |
186 PassRefPtr<WebGLActiveInfo> getActiveAttrib(WebGLProgram*, GLuint index); | 186 PassRefPtrWillBeRawPtr<WebGLActiveInfo> getActiveAttrib(WebGLProgram*, GLuin
t index); |
187 PassRefPtr<WebGLActiveInfo> getActiveUniform(WebGLProgram*, GLuint index); | 187 PassRefPtrWillBeRawPtr<WebGLActiveInfo> getActiveUniform(WebGLProgram*, GLui
nt index); |
188 bool getAttachedShaders(WebGLProgram*, Vector<RefPtr<WebGLShader> >&); | 188 bool getAttachedShaders(WebGLProgram*, WillBeHeapVector<RefPtrWillBeMember<W
ebGLShader> >&); |
189 GLint getAttribLocation(WebGLProgram*, const String& name); | 189 GLint getAttribLocation(WebGLProgram*, const String& name); |
190 WebGLGetInfo getBufferParameter(GLenum target, GLenum pname); | 190 WebGLGetInfo getBufferParameter(GLenum target, GLenum pname); |
191 PassRefPtr<WebGLContextAttributes> getContextAttributes(); | 191 PassRefPtrWillBeRawPtr<WebGLContextAttributes> getContextAttributes(); |
192 GLenum getError(); | 192 GLenum getError(); |
193 PassRefPtr<WebGLExtension> getExtension(const String& name); | 193 PassRefPtrWillBeRawPtr<WebGLExtension> getExtension(const String& name); |
194 WebGLGetInfo getFramebufferAttachmentParameter(GLenum target, GLenum attachm
ent, GLenum pname); | 194 WebGLGetInfo getFramebufferAttachmentParameter(GLenum target, GLenum attachm
ent, GLenum pname); |
195 WebGLGetInfo getParameter(GLenum pname); | 195 WebGLGetInfo getParameter(GLenum pname); |
196 WebGLGetInfo getProgramParameter(WebGLProgram*, GLenum pname); | 196 WebGLGetInfo getProgramParameter(WebGLProgram*, GLenum pname); |
197 String getProgramInfoLog(WebGLProgram*); | 197 String getProgramInfoLog(WebGLProgram*); |
198 WebGLGetInfo getRenderbufferParameter(GLenum target, GLenum pname); | 198 WebGLGetInfo getRenderbufferParameter(GLenum target, GLenum pname); |
199 WebGLGetInfo getShaderParameter(WebGLShader*, GLenum pname); | 199 WebGLGetInfo getShaderParameter(WebGLShader*, GLenum pname); |
200 String getShaderInfoLog(WebGLShader*); | 200 String getShaderInfoLog(WebGLShader*); |
201 PassRefPtr<WebGLShaderPrecisionFormat> getShaderPrecisionFormat(GLenum shade
rType, GLenum precisionType); | 201 PassRefPtrWillBeRawPtr<WebGLShaderPrecisionFormat> getShaderPrecisionFormat(
GLenum shaderType, GLenum precisionType); |
202 String getShaderSource(WebGLShader*); | 202 String getShaderSource(WebGLShader*); |
203 Vector<String> getSupportedExtensions(); | 203 Vector<String> getSupportedExtensions(); |
204 WebGLGetInfo getTexParameter(GLenum target, GLenum pname); | 204 WebGLGetInfo getTexParameter(GLenum target, GLenum pname); |
205 WebGLGetInfo getUniform(WebGLProgram*, const WebGLUniformLocation*); | 205 WebGLGetInfo getUniform(WebGLProgram*, const WebGLUniformLocation*); |
206 PassRefPtr<WebGLUniformLocation> getUniformLocation(WebGLProgram*, const Str
ing&); | 206 PassRefPtrWillBeRawPtr<WebGLUniformLocation> getUniformLocation(WebGLProgram
*, const String&); |
207 WebGLGetInfo getVertexAttrib(GLuint index, GLenum pname); | 207 WebGLGetInfo getVertexAttrib(GLuint index, GLenum pname); |
208 long long getVertexAttribOffset(GLuint index, GLenum pname); | 208 long long getVertexAttribOffset(GLuint index, GLenum pname); |
209 | 209 |
210 void hint(GLenum target, GLenum mode); | 210 void hint(GLenum target, GLenum mode); |
211 GLboolean isBuffer(WebGLBuffer*); | 211 GLboolean isBuffer(WebGLBuffer*); |
212 bool isContextLost() const; | 212 bool isContextLost() const; |
213 GLboolean isEnabled(GLenum cap); | 213 GLboolean isEnabled(GLenum cap); |
214 GLboolean isFramebuffer(WebGLFramebuffer*); | 214 GLboolean isFramebuffer(WebGLFramebuffer*); |
215 GLboolean isProgram(WebGLProgram*); | 215 GLboolean isProgram(WebGLProgram*); |
216 GLboolean isRenderbuffer(WebGLRenderbuffer*); | 216 GLboolean isRenderbuffer(WebGLRenderbuffer*); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
342 void removeSharedObject(WebGLSharedObject*); | 342 void removeSharedObject(WebGLSharedObject*); |
343 void removeContextObject(WebGLContextObject*); | 343 void removeContextObject(WebGLContextObject*); |
344 | 344 |
345 unsigned maxVertexAttribs() const { return m_maxVertexAttribs; } | 345 unsigned maxVertexAttribs() const { return m_maxVertexAttribs; } |
346 | 346 |
347 // ActiveDOMObject notifications | 347 // ActiveDOMObject notifications |
348 virtual bool hasPendingActivity() const OVERRIDE; | 348 virtual bool hasPendingActivity() const OVERRIDE; |
349 virtual void stop() OVERRIDE; | 349 virtual void stop() OVERRIDE; |
350 | 350 |
351 void setSavingImage(bool isSaving) { m_savingImage = isSaving; } | 351 void setSavingImage(bool isSaving) { m_savingImage = isSaving; } |
| 352 |
| 353 virtual void trace(Visitor*) OVERRIDE; |
| 354 |
| 355 class TextureUnitState { |
| 356 ALLOW_ONLY_INLINE_ALLOCATION(); |
| 357 public: |
| 358 RefPtrWillBeMember<WebGLTexture> m_texture2DBinding; |
| 359 RefPtrWillBeMember<WebGLTexture> m_textureCubeMapBinding; |
| 360 |
| 361 void trace(Visitor*); |
| 362 }; |
| 363 |
352 protected: | 364 protected: |
353 friend class WebGLDrawBuffers; | 365 friend class WebGLDrawBuffers; |
354 friend class WebGLFramebuffer; | 366 friend class WebGLFramebuffer; |
355 friend class WebGLObject; | 367 friend class WebGLObject; |
356 friend class OESVertexArrayObject; | 368 friend class OESVertexArrayObject; |
357 friend class WebGLDebugShaders; | 369 friend class WebGLDebugShaders; |
358 friend class WebGLCompressedTextureATC; | 370 friend class WebGLCompressedTextureATC; |
359 friend class WebGLCompressedTextureETC1; | 371 friend class WebGLCompressedTextureETC1; |
360 friend class WebGLCompressedTexturePVRTC; | 372 friend class WebGLCompressedTexturePVRTC; |
361 friend class WebGLCompressedTextureS3TC; | 373 friend class WebGLCompressedTextureS3TC; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
395 | 407 |
396 PassRefPtr<Image> drawImageIntoBuffer(Image*, int width, int height, const c
har* functionName); | 408 PassRefPtr<Image> drawImageIntoBuffer(Image*, int width, int height, const c
har* functionName); |
397 | 409 |
398 PassRefPtr<Image> videoFrameToImage(HTMLVideoElement*, BackingStoreCopy); | 410 PassRefPtr<Image> videoFrameToImage(HTMLVideoElement*, BackingStoreCopy); |
399 | 411 |
400 WebGLRenderbuffer* ensureEmulatedStencilBuffer(GLenum target, WebGLRenderbuf
fer*); | 412 WebGLRenderbuffer* ensureEmulatedStencilBuffer(GLenum target, WebGLRenderbuf
fer*); |
401 | 413 |
402 // Structure for rendering to a DrawingBuffer, instead of directly | 414 // Structure for rendering to a DrawingBuffer, instead of directly |
403 // to the back-buffer of m_context. | 415 // to the back-buffer of m_context. |
404 RefPtr<DrawingBuffer> m_drawingBuffer; | 416 RefPtr<DrawingBuffer> m_drawingBuffer; |
405 RefPtr<WebGLContextGroup> m_contextGroup; | 417 RefPtrWillBeMember<WebGLContextGroup> m_contextGroup; |
406 | 418 |
407 // Dispatches a context lost event once it is determined that one is needed. | 419 // Dispatches a context lost event once it is determined that one is needed. |
408 // This is used both for synthetic and real context losses. For real ones, i
t's | 420 // This is used both for synthetic and real context losses. For real ones, i
t's |
409 // likely that there's no JavaScript on the stack, but that might be depende
nt | 421 // likely that there's no JavaScript on the stack, but that might be depende
nt |
410 // on how exactly the platform discovers that the context was lost. For bett
er | 422 // on how exactly the platform discovers that the context was lost. For bett
er |
411 // portability we always defer the dispatch of the event. | 423 // portability we always defer the dispatch of the event. |
412 Timer<WebGLRenderingContextBase> m_dispatchContextLostEventTimer; | 424 Timer<WebGLRenderingContextBase> m_dispatchContextLostEventTimer; |
413 bool m_restoreAllowed; | 425 bool m_restoreAllowed; |
414 Timer<WebGLRenderingContextBase> m_restoreTimer; | 426 Timer<WebGLRenderingContextBase> m_restoreTimer; |
415 | 427 |
416 bool m_needsUpdate; | 428 bool m_needsUpdate; |
417 bool m_markedCanvasDirty; | 429 bool m_markedCanvasDirty; |
418 HashSet<WebGLContextObject*> m_contextObjects; | 430 WillBeHeapHashSet<RawPtrWillBeWeakMember<WebGLContextObject> > m_contextObje
cts; |
419 | 431 |
420 OwnPtr<WebGLRenderingContextLostCallback> m_contextLostCallbackAdapter; | 432 OwnPtr<WebGLRenderingContextLostCallback> m_contextLostCallbackAdapter; |
421 OwnPtr<WebGLRenderingContextErrorMessageCallback> m_errorMessageCallbackAdap
ter; | 433 OwnPtr<WebGLRenderingContextErrorMessageCallback> m_errorMessageCallbackAdap
ter; |
422 | 434 |
423 // List of bound VBO's. Used to maintain info about sizes for ARRAY_BUFFER a
nd stored values for ELEMENT_ARRAY_BUFFER | 435 // List of bound VBO's. Used to maintain info about sizes for ARRAY_BUFFER a
nd stored values for ELEMENT_ARRAY_BUFFER |
424 RefPtr<WebGLBuffer> m_boundArrayBuffer; | 436 RefPtrWillBeMember<WebGLBuffer> m_boundArrayBuffer; |
425 | 437 |
426 RefPtr<WebGLVertexArrayObjectOES> m_defaultVertexArrayObject; | 438 RefPtrWillBeMember<WebGLVertexArrayObjectOES> m_defaultVertexArrayObject; |
427 RefPtr<WebGLVertexArrayObjectOES> m_boundVertexArrayObject; | 439 RefPtrWillBeMember<WebGLVertexArrayObjectOES> m_boundVertexArrayObject; |
428 void setBoundVertexArrayObject(PassRefPtr<WebGLVertexArrayObjectOES> arrayOb
ject) | 440 void setBoundVertexArrayObject(PassRefPtrWillBeRawPtr<WebGLVertexArrayObject
OES> arrayObject) |
429 { | 441 { |
430 if (arrayObject) | 442 if (arrayObject) |
431 m_boundVertexArrayObject = arrayObject; | 443 m_boundVertexArrayObject = arrayObject; |
432 else | 444 else |
433 m_boundVertexArrayObject = m_defaultVertexArrayObject; | 445 m_boundVertexArrayObject = m_defaultVertexArrayObject; |
434 } | 446 } |
435 | 447 |
436 class VertexAttribValue { | 448 class VertexAttribValue { |
437 public: | 449 public: |
438 VertexAttribValue() | 450 VertexAttribValue() |
439 { | 451 { |
440 initValue(); | 452 initValue(); |
441 } | 453 } |
442 | 454 |
443 void initValue() | 455 void initValue() |
444 { | 456 { |
445 value[0] = 0.0f; | 457 value[0] = 0.0f; |
446 value[1] = 0.0f; | 458 value[1] = 0.0f; |
447 value[2] = 0.0f; | 459 value[2] = 0.0f; |
448 value[3] = 1.0f; | 460 value[3] = 1.0f; |
449 } | 461 } |
450 | 462 |
451 GLfloat value[4]; | 463 GLfloat value[4]; |
452 }; | 464 }; |
453 Vector<VertexAttribValue> m_vertexAttribValue; | 465 Vector<VertexAttribValue> m_vertexAttribValue; |
454 unsigned m_maxVertexAttribs; | 466 unsigned m_maxVertexAttribs; |
455 RefPtr<WebGLBuffer> m_vertexAttrib0Buffer; | 467 RefPtrWillBeMember<WebGLBuffer> m_vertexAttrib0Buffer; |
456 long m_vertexAttrib0BufferSize; | 468 long m_vertexAttrib0BufferSize; |
457 GLfloat m_vertexAttrib0BufferValue[4]; | 469 GLfloat m_vertexAttrib0BufferValue[4]; |
458 bool m_forceAttrib0BufferRefill; | 470 bool m_forceAttrib0BufferRefill; |
459 bool m_vertexAttrib0UsedBefore; | 471 bool m_vertexAttrib0UsedBefore; |
460 | 472 |
461 RefPtr<WebGLProgram> m_currentProgram; | 473 RefPtrWillBeMember<WebGLProgram> m_currentProgram; |
462 RefPtr<WebGLFramebuffer> m_framebufferBinding; | 474 RefPtrWillBeMember<WebGLFramebuffer> m_framebufferBinding; |
463 RefPtr<WebGLRenderbuffer> m_renderbufferBinding; | 475 RefPtrWillBeMember<WebGLRenderbuffer> m_renderbufferBinding; |
464 class TextureUnitState { | 476 |
465 public: | 477 WillBeHeapVector<TextureUnitState> m_textureUnits; |
466 RefPtr<WebGLTexture> m_texture2DBinding; | |
467 RefPtr<WebGLTexture> m_textureCubeMapBinding; | |
468 }; | |
469 Vector<TextureUnitState> m_textureUnits; | |
470 unsigned long m_activeTextureUnit; | 478 unsigned long m_activeTextureUnit; |
471 | 479 |
472 RefPtr<WebGLTexture> m_blackTexture2D; | 480 RefPtrWillBeMember<WebGLTexture> m_blackTexture2D; |
473 RefPtr<WebGLTexture> m_blackTextureCubeMap; | 481 RefPtrWillBeMember<WebGLTexture> m_blackTextureCubeMap; |
474 | 482 |
475 Vector<GLenum> m_compressedTextureFormats; | 483 Vector<GLenum> m_compressedTextureFormats; |
476 | 484 |
477 // Fixed-size cache of reusable image buffers for video texImage2D calls. | 485 // Fixed-size cache of reusable image buffers for video texImage2D calls. |
478 class LRUImageBufferCache { | 486 class LRUImageBufferCache { |
479 public: | 487 public: |
480 LRUImageBufferCache(int capacity); | 488 LRUImageBufferCache(int capacity); |
481 // The pointer returned is owned by the image buffer map. | 489 // The pointer returned is owned by the image buffer map. |
482 ImageBuffer* imageBuffer(const IntSize& size); | 490 ImageBuffer* imageBuffer(const IntSize& size); |
483 private: | 491 private: |
(...skipping 16 matching lines...) Expand all Loading... |
500 bool m_drawBuffersWebGLRequirementsChecked; | 508 bool m_drawBuffersWebGLRequirementsChecked; |
501 bool m_drawBuffersSupported; | 509 bool m_drawBuffersSupported; |
502 | 510 |
503 GLint m_packAlignment; | 511 GLint m_packAlignment; |
504 GLint m_unpackAlignment; | 512 GLint m_unpackAlignment; |
505 bool m_unpackFlipY; | 513 bool m_unpackFlipY; |
506 bool m_unpackPremultiplyAlpha; | 514 bool m_unpackPremultiplyAlpha; |
507 GLenum m_unpackColorspaceConversion; | 515 GLenum m_unpackColorspaceConversion; |
508 bool m_contextLost; | 516 bool m_contextLost; |
509 LostContextMode m_contextLostMode; | 517 LostContextMode m_contextLostMode; |
510 RefPtr<WebGLContextAttributes> m_requestedAttributes; | 518 RefPtrWillBeMember<WebGLContextAttributes> m_requestedAttributes; |
511 | 519 |
512 bool m_layerCleared; | 520 bool m_layerCleared; |
513 GLfloat m_clearColor[4]; | 521 GLfloat m_clearColor[4]; |
514 bool m_scissorEnabled; | 522 bool m_scissorEnabled; |
515 GLfloat m_clearDepth; | 523 GLfloat m_clearDepth; |
516 GLint m_clearStencil; | 524 GLint m_clearStencil; |
517 GLboolean m_colorMask[4]; | 525 GLboolean m_colorMask[4]; |
518 GLboolean m_depthMask; | 526 GLboolean m_depthMask; |
519 | 527 |
520 bool m_stencilEnabled; | 528 bool m_stencilEnabled; |
(...skipping 16 matching lines...) Expand all Loading... |
537 OwnPtr<Extensions3DUtil> m_extensionsUtil; | 545 OwnPtr<Extensions3DUtil> m_extensionsUtil; |
538 | 546 |
539 bool m_savingImage; | 547 bool m_savingImage; |
540 | 548 |
541 enum ExtensionFlags { | 549 enum ExtensionFlags { |
542 ApprovedExtension = 0x00, | 550 ApprovedExtension = 0x00, |
543 // Extension that is behind the draft extensions runtime flag: | 551 // Extension that is behind the draft extensions runtime flag: |
544 DraftExtension = 0x01, | 552 DraftExtension = 0x01, |
545 }; | 553 }; |
546 | 554 |
547 class ExtensionTracker { | 555 class ExtensionTracker : public NoBaseWillBeGarbageCollected<ExtensionTracke
r> { |
548 public: | 556 public: |
549 ExtensionTracker(ExtensionFlags flags, const char* const* prefixes) | 557 ExtensionTracker(ExtensionFlags flags, const char* const* prefixes) |
550 : m_draft(flags & DraftExtension) | 558 : m_draft(flags & DraftExtension) |
551 , m_prefixes(prefixes) | 559 , m_prefixes(prefixes) |
552 { | 560 { |
553 } | 561 } |
554 | 562 |
| 563 #if !ENABLE(OILPAN) |
555 virtual ~ExtensionTracker() | 564 virtual ~ExtensionTracker() |
556 { | 565 { |
557 } | 566 } |
| 567 #endif |
558 | 568 |
559 bool draft() const | 569 bool draft() const |
560 { | 570 { |
561 return m_draft; | 571 return m_draft; |
562 } | 572 } |
563 | 573 |
564 const char* const* prefixes() const; | 574 const char* const* prefixes() const; |
565 bool matchesNameWithPrefixes(const String&) const; | 575 bool matchesNameWithPrefixes(const String&) const; |
566 | 576 |
567 virtual PassRefPtr<WebGLExtension> getExtension(WebGLRenderingContextBas
e*) = 0; | 577 virtual PassRefPtrWillBeRawPtr<WebGLExtension> getExtension(WebGLRenderi
ngContextBase*) = 0; |
568 virtual bool supported(WebGLRenderingContextBase*) const = 0; | 578 virtual bool supported(WebGLRenderingContextBase*) const = 0; |
569 virtual const char* extensionName() const = 0; | 579 virtual const char* extensionName() const = 0; |
570 virtual void loseExtension() = 0; | 580 virtual void loseExtension() = 0; |
571 | 581 |
| 582 virtual void trace(Visitor*) { } |
| 583 |
572 private: | 584 private: |
573 bool m_draft; | 585 bool m_draft; |
574 const char* const* m_prefixes; | 586 const char* const* m_prefixes; |
575 }; | 587 }; |
576 | 588 |
577 template <typename T> | 589 template <typename T> |
578 class TypedExtensionTracker FINAL : public ExtensionTracker { | 590 class TypedExtensionTracker FINAL : public ExtensionTracker { |
579 public: | 591 public: |
580 TypedExtensionTracker(RefPtr<T>& extensionField, ExtensionFlags flags, c
onst char* const* prefixes) | 592 TypedExtensionTracker(RefPtrWillBeMember<T>& extensionField, ExtensionFl
ags flags, const char* const* prefixes) |
581 : ExtensionTracker(flags, prefixes) | 593 : ExtensionTracker(flags, prefixes) |
582 , m_extensionField(extensionField) | 594 , m_extensionField(extensionField) |
583 , m_extension(nullptr) | 595 , m_extension(nullptr) |
584 { | 596 { |
585 } | 597 } |
586 | 598 |
| 599 #if !ENABLE(OILPAN) |
587 virtual ~TypedExtensionTracker() | 600 virtual ~TypedExtensionTracker() |
588 { | 601 { |
589 if (m_extension) { | 602 if (m_extension) { |
590 m_extension->lose(true); | 603 m_extension->lose(true); |
591 m_extension = nullptr; | 604 m_extension = nullptr; |
592 } | 605 } |
593 } | 606 } |
| 607 #endif |
594 | 608 |
595 virtual PassRefPtr<WebGLExtension> getExtension(WebGLRenderingContextBas
e* context) OVERRIDE | 609 virtual PassRefPtrWillBeRawPtr<WebGLExtension> getExtension(WebGLRenderi
ngContextBase* context) OVERRIDE |
596 { | 610 { |
597 if (!m_extension) { | 611 if (!m_extension) { |
598 m_extension = T::create(context); | 612 m_extension = T::create(context); |
599 m_extensionField = m_extension; | 613 m_extensionField = m_extension; |
600 } | 614 } |
601 | 615 |
602 return m_extension; | 616 return m_extension; |
603 } | 617 } |
604 | 618 |
605 virtual bool supported(WebGLRenderingContextBase* context) const OVERRID
E | 619 virtual bool supported(WebGLRenderingContextBase* context) const OVERRID
E |
606 { | 620 { |
607 return T::supported(context); | 621 return T::supported(context); |
608 } | 622 } |
609 | 623 |
610 virtual const char* extensionName() const OVERRIDE | 624 virtual const char* extensionName() const OVERRIDE |
611 { | 625 { |
612 return T::extensionName(); | 626 return T::extensionName(); |
613 } | 627 } |
614 | 628 |
615 virtual void loseExtension() OVERRIDE | 629 virtual void loseExtension() OVERRIDE |
616 { | 630 { |
617 if (m_extension) { | 631 if (m_extension) { |
618 m_extension->lose(false); | 632 m_extension->lose(false); |
619 if (m_extension->isLost()) | 633 if (m_extension->isLost()) |
620 m_extension = nullptr; | 634 m_extension = nullptr; |
621 } | 635 } |
622 } | 636 } |
623 | 637 |
| 638 virtual void trace(Visitor* visitor) OVERRIDE |
| 639 { |
| 640 visitor->trace(m_extensionField); |
| 641 visitor->trace(m_extension); |
| 642 ExtensionTracker::trace(visitor); |
| 643 } |
| 644 |
624 private: | 645 private: |
625 RefPtr<T>& m_extensionField; | 646 RefPtrWillBeMember<T>& m_extensionField; |
626 // ExtensionTracker holds it's own reference to the extension to ensure | 647 // ExtensionTracker holds it's own reference to the extension to ensure |
627 // that it is not deleted before this object's destructor is called | 648 // that it is not deleted before this object's destructor is called |
628 RefPtr<T> m_extension; | 649 RefPtrWillBeMember<T> m_extension; |
629 }; | 650 }; |
630 | 651 |
631 bool m_extensionEnabled[WebGLExtensionNameCount]; | 652 bool m_extensionEnabled[WebGLExtensionNameCount]; |
632 Vector<ExtensionTracker*> m_extensions; | 653 WillBeHeapVector<RawPtrWillBeMember<ExtensionTracker> > m_extensions; |
633 | 654 |
634 template <typename T> | 655 template <typename T> |
635 void registerExtension(RefPtr<T>& extensionPtr, ExtensionFlags flags = Appro
vedExtension, const char* const* prefixes = 0) | 656 void registerExtension(RefPtrWillBeMember<T>& extensionPtr, ExtensionFlags f
lags = ApprovedExtension, const char* const* prefixes = 0) |
636 { | 657 { |
637 m_extensions.append(new TypedExtensionTracker<T>(extensionPtr, flags, pr
efixes)); | 658 m_extensions.append(new TypedExtensionTracker<T>(extensionPtr, flags, pr
efixes)); |
638 } | 659 } |
639 | 660 |
640 bool extensionSupportedAndAllowed(const ExtensionTracker*); | 661 bool extensionSupportedAndAllowed(const ExtensionTracker*); |
641 | 662 |
642 inline bool extensionEnabled(WebGLExtensionName name) | 663 inline bool extensionEnabled(WebGLExtensionName name) |
643 { | 664 { |
644 return m_extensionEnabled[name]; | 665 return m_extensionEnabled[name]; |
645 } | 666 } |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
901 // Return the least recently used context's position in the active context v
ector. | 922 // Return the least recently used context's position in the active context v
ector. |
902 // If the vector is empty, return the maximum allowed active context number. | 923 // If the vector is empty, return the maximum allowed active context number. |
903 static size_t oldestContextIndex(); | 924 static size_t oldestContextIndex(); |
904 static IntSize oldestContextSize(); | 925 static IntSize oldestContextSize(); |
905 }; | 926 }; |
906 | 927 |
907 DEFINE_TYPE_CASTS(WebGLRenderingContextBase, CanvasRenderingContext, context, co
ntext->is3d(), context.is3d()); | 928 DEFINE_TYPE_CASTS(WebGLRenderingContextBase, CanvasRenderingContext, context, co
ntext->is3d(), context.is3d()); |
908 | 929 |
909 } // namespace WebCore | 930 } // namespace WebCore |
910 | 931 |
| 932 WTF_ALLOW_MOVE_INIT_AND_COMPARE_WITH_MEM_FUNCTIONS(WebCore::WebGLRenderingContex
tBase::TextureUnitState); |
| 933 |
911 #endif // WebGLRenderingContextBase_h | 934 #endif // WebGLRenderingContextBase_h |
OLD | NEW |