Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1319)

Side by Side Diff: Source/core/html/canvas/WebGLRenderingContextBase.h

Issue 365653002: Oilpan: move 2D Canvas and WebGL objects to the heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Adjust GC_PLUGIN_IGNORE() bug reference Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 class WebGLDrawBuffers; 84 class WebGLDrawBuffers;
85 class WebGLExtension; 85 class WebGLExtension;
86 class WebGLFramebuffer; 86 class WebGLFramebuffer;
87 class WebGLLoseContext; 87 class WebGLLoseContext;
88 class WebGLObject; 88 class WebGLObject;
89 class WebGLProgram; 89 class WebGLProgram;
90 class WebGLRenderbuffer; 90 class WebGLRenderbuffer;
91 class WebGLShader; 91 class WebGLShader;
92 class WebGLShaderPrecisionFormat; 92 class WebGLShaderPrecisionFormat;
93 class WebGLSharedObject; 93 class WebGLSharedObject;
94 class WebGLSharedWebGraphicsContext3D;
94 class WebGLTexture; 95 class WebGLTexture;
95 class WebGLUniformLocation; 96 class WebGLUniformLocation;
96 class WebGLVertexArrayObjectOES; 97 class WebGLVertexArrayObjectOES;
97 98
98 class WebGLRenderingContextLostCallback; 99 class WebGLRenderingContextLostCallback;
99 class WebGLRenderingContextErrorMessageCallback; 100 class WebGLRenderingContextErrorMessageCallback;
100 101
101 class WebGLRenderingContextBase: public CanvasRenderingContext, public ActiveDOM Object, public Page::MultisamplingChangedObserver { 102 class WebGLRenderingContextBase: public CanvasRenderingContext, public ActiveDOM Object, public Page::MultisamplingChangedObserver {
102 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(WebGLRenderingContextBase); 103 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(WebGLRenderingContextBase);
103 public: 104 public:
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 void clearStencil(GLint); 141 void clearStencil(GLint);
141 void colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alp ha); 142 void colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alp ha);
142 void compileShader(WebGLShader*); 143 void compileShader(WebGLShader*);
143 144
144 void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, ArrayBufferView* data); 145 void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, ArrayBufferView* data);
145 void compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLin t yoffset, GLsizei width, GLsizei height, GLenum format, ArrayBufferView* data); 146 void compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLin t yoffset, GLsizei width, GLsizei height, GLenum format, ArrayBufferView* data);
146 147
147 void copyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); 148 void copyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
148 void copyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoff set, GLint x, GLint y, GLsizei width, GLsizei height); 149 void copyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoff set, GLint x, GLint y, GLsizei width, GLsizei height);
149 150
150 PassRefPtr<WebGLBuffer> createBuffer(); 151 PassRefPtrWillBeRawPtr<WebGLBuffer> createBuffer();
151 PassRefPtr<WebGLFramebuffer> createFramebuffer(); 152 PassRefPtrWillBeRawPtr<WebGLFramebuffer> createFramebuffer();
152 PassRefPtr<WebGLProgram> createProgram(); 153 PassRefPtrWillBeRawPtr<WebGLProgram> createProgram();
153 PassRefPtr<WebGLRenderbuffer> createRenderbuffer(); 154 PassRefPtrWillBeRawPtr<WebGLRenderbuffer> createRenderbuffer();
154 PassRefPtr<WebGLShader> createShader(GLenum type); 155 PassRefPtrWillBeRawPtr<WebGLShader> createShader(GLenum type);
155 PassRefPtr<WebGLTexture> createTexture(); 156 PassRefPtrWillBeRawPtr<WebGLTexture> createTexture();
156 157
157 void cullFace(GLenum mode); 158 void cullFace(GLenum mode);
158 159
159 void deleteBuffer(WebGLBuffer*); 160 void deleteBuffer(WebGLBuffer*);
160 void deleteFramebuffer(WebGLFramebuffer*); 161 void deleteFramebuffer(WebGLFramebuffer*);
161 void deleteProgram(WebGLProgram*); 162 void deleteProgram(WebGLProgram*);
162 void deleteRenderbuffer(WebGLRenderbuffer*); 163 void deleteRenderbuffer(WebGLRenderbuffer*);
163 void deleteShader(WebGLShader*); 164 void deleteShader(WebGLShader*);
164 void deleteTexture(WebGLTexture*); 165 void deleteTexture(WebGLTexture*);
165 166
(...skipping 11 matching lines...) Expand all
177 178
178 void enable(GLenum cap); 179 void enable(GLenum cap);
179 void enableVertexAttribArray(GLuint index); 180 void enableVertexAttribArray(GLuint index);
180 void finish(); 181 void finish();
181 void flush(); 182 void flush();
182 void framebufferRenderbuffer(GLenum target, GLenum attachment, GLenum render buffertarget, WebGLRenderbuffer*); 183 void framebufferRenderbuffer(GLenum target, GLenum attachment, GLenum render buffertarget, WebGLRenderbuffer*);
183 void framebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget , WebGLTexture*, GLint level); 184 void framebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget , WebGLTexture*, GLint level);
184 void frontFace(GLenum mode); 185 void frontFace(GLenum mode);
185 void generateMipmap(GLenum target); 186 void generateMipmap(GLenum target);
186 187
187 PassRefPtr<WebGLActiveInfo> getActiveAttrib(WebGLProgram*, GLuint index); 188 PassRefPtrWillBeRawPtr<WebGLActiveInfo> getActiveAttrib(WebGLProgram*, GLuin t index);
188 PassRefPtr<WebGLActiveInfo> getActiveUniform(WebGLProgram*, GLuint index); 189 PassRefPtrWillBeRawPtr<WebGLActiveInfo> getActiveUniform(WebGLProgram*, GLui nt index);
189 Nullable<Vector<RefPtr<WebGLShader> > > getAttachedShaders(WebGLProgram*); 190 bool getAttachedShaders(WebGLProgram*, WillBeHeapVector<RefPtrWillBeMember<W ebGLShader> >&);
191 Nullable<WillBeHeapVector<RefPtrWillBeMember<WebGLShader> > > getAttachedSha ders(WebGLProgram*);
190 GLint getAttribLocation(WebGLProgram*, const String& name); 192 GLint getAttribLocation(WebGLProgram*, const String& name);
191 WebGLGetInfo getBufferParameter(GLenum target, GLenum pname); 193 WebGLGetInfo getBufferParameter(GLenum target, GLenum pname);
192 PassRefPtr<WebGLContextAttributes> getContextAttributes(); 194 PassRefPtrWillBeRawPtr<WebGLContextAttributes> getContextAttributes();
193 GLenum getError(); 195 GLenum getError();
194 PassRefPtr<WebGLExtension> getExtension(const String& name); 196 PassRefPtrWillBeRawPtr<WebGLExtension> getExtension(const String& name);
195 WebGLGetInfo getFramebufferAttachmentParameter(GLenum target, GLenum attachm ent, GLenum pname); 197 WebGLGetInfo getFramebufferAttachmentParameter(GLenum target, GLenum attachm ent, GLenum pname);
196 WebGLGetInfo getParameter(GLenum pname); 198 WebGLGetInfo getParameter(GLenum pname);
197 WebGLGetInfo getProgramParameter(WebGLProgram*, GLenum pname); 199 WebGLGetInfo getProgramParameter(WebGLProgram*, GLenum pname);
198 String getProgramInfoLog(WebGLProgram*); 200 String getProgramInfoLog(WebGLProgram*);
199 WebGLGetInfo getRenderbufferParameter(GLenum target, GLenum pname); 201 WebGLGetInfo getRenderbufferParameter(GLenum target, GLenum pname);
200 WebGLGetInfo getShaderParameter(WebGLShader*, GLenum pname); 202 WebGLGetInfo getShaderParameter(WebGLShader*, GLenum pname);
201 String getShaderInfoLog(WebGLShader*); 203 String getShaderInfoLog(WebGLShader*);
202 PassRefPtr<WebGLShaderPrecisionFormat> getShaderPrecisionFormat(GLenum shade rType, GLenum precisionType); 204 PassRefPtrWillBeRawPtr<WebGLShaderPrecisionFormat> getShaderPrecisionFormat( GLenum shaderType, GLenum precisionType);
203 String getShaderSource(WebGLShader*); 205 String getShaderSource(WebGLShader*);
204 Nullable<Vector<String> > getSupportedExtensions(); 206 Nullable<Vector<String> > getSupportedExtensions();
205 WebGLGetInfo getTexParameter(GLenum target, GLenum pname); 207 WebGLGetInfo getTexParameter(GLenum target, GLenum pname);
206 WebGLGetInfo getUniform(WebGLProgram*, const WebGLUniformLocation*); 208 WebGLGetInfo getUniform(WebGLProgram*, const WebGLUniformLocation*);
207 PassRefPtr<WebGLUniformLocation> getUniformLocation(WebGLProgram*, const Str ing&); 209 PassRefPtrWillBeRawPtr<WebGLUniformLocation> getUniformLocation(WebGLProgram *, const String&);
208 WebGLGetInfo getVertexAttrib(GLuint index, GLenum pname); 210 WebGLGetInfo getVertexAttrib(GLuint index, GLenum pname);
209 long long getVertexAttribOffset(GLuint index, GLenum pname); 211 long long getVertexAttribOffset(GLuint index, GLenum pname);
210 212
211 void hint(GLenum target, GLenum mode); 213 void hint(GLenum target, GLenum mode);
212 GLboolean isBuffer(WebGLBuffer*); 214 GLboolean isBuffer(WebGLBuffer*);
213 bool isContextLost() const; 215 bool isContextLost() const;
214 GLboolean isEnabled(GLenum cap); 216 GLboolean isEnabled(GLenum cap);
215 GLboolean isFramebuffer(WebGLFramebuffer*); 217 GLboolean isFramebuffer(WebGLFramebuffer*);
216 GLboolean isProgram(WebGLProgram*); 218 GLboolean isProgram(WebGLProgram*);
217 GLboolean isRenderbuffer(WebGLRenderbuffer*); 219 GLboolean isRenderbuffer(WebGLRenderbuffer*);
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 void removeSharedObject(WebGLSharedObject*); 345 void removeSharedObject(WebGLSharedObject*);
344 void removeContextObject(WebGLContextObject*); 346 void removeContextObject(WebGLContextObject*);
345 347
346 unsigned maxVertexAttribs() const { return m_maxVertexAttribs; } 348 unsigned maxVertexAttribs() const { return m_maxVertexAttribs; }
347 349
348 // ActiveDOMObject notifications 350 // ActiveDOMObject notifications
349 virtual bool hasPendingActivity() const OVERRIDE; 351 virtual bool hasPendingActivity() const OVERRIDE;
350 virtual void stop() OVERRIDE; 352 virtual void stop() OVERRIDE;
351 353
352 void setSavingImage(bool isSaving) { m_savingImage = isSaving; } 354 void setSavingImage(bool isSaving) { m_savingImage = isSaving; }
355
356 virtual void trace(Visitor*) OVERRIDE;
357
358 class TextureUnitState {
359 ALLOW_ONLY_INLINE_ALLOCATION();
360 public:
361 RefPtrWillBeMember<WebGLTexture> m_texture2DBinding;
362 RefPtrWillBeMember<WebGLTexture> m_textureCubeMapBinding;
363
364 void trace(Visitor*);
365 };
366
353 protected: 367 protected:
354 friend class WebGLDrawBuffers; 368 friend class WebGLDrawBuffers;
355 friend class WebGLFramebuffer; 369 friend class WebGLFramebuffer;
356 friend class WebGLObject; 370 friend class WebGLObject;
371 friend class WebGLContextObject;
357 friend class OESVertexArrayObject; 372 friend class OESVertexArrayObject;
358 friend class WebGLDebugShaders; 373 friend class WebGLDebugShaders;
359 friend class WebGLCompressedTextureATC; 374 friend class WebGLCompressedTextureATC;
360 friend class WebGLCompressedTextureETC1; 375 friend class WebGLCompressedTextureETC1;
361 friend class WebGLCompressedTexturePVRTC; 376 friend class WebGLCompressedTexturePVRTC;
362 friend class WebGLCompressedTextureS3TC; 377 friend class WebGLCompressedTextureS3TC;
363 friend class WebGLRenderingContextErrorMessageCallback; 378 friend class WebGLRenderingContextErrorMessageCallback;
364 friend class WebGLVertexArrayObjectOES; 379 friend class WebGLVertexArrayObjectOES;
365 friend class ScopedTexture2DRestorer; 380 friend class ScopedTexture2DRestorer;
366 381
367 WebGLRenderingContextBase(HTMLCanvasElement*, PassOwnPtr<blink::WebGraphicsC ontext3D>, WebGLContextAttributes*); 382 WebGLRenderingContextBase(HTMLCanvasElement*, PassOwnPtr<blink::WebGraphicsC ontext3D>, WebGLContextAttributes*);
368 PassRefPtr<DrawingBuffer> createDrawingBuffer(PassOwnPtr<blink::WebGraphicsC ontext3D>); 383 PassRefPtr<DrawingBuffer> createDrawingBuffer(PassOwnPtr<blink::WebGraphicsC ontext3D>);
369 void initializeNewContext(); 384 void initializeNewContext();
370 void setupFlags(); 385 void setupFlags();
371 386
387 #if ENABLE(OILPAN)
388 PassRefPtr<WebGLSharedWebGraphicsContext3D> sharedWebGraphicsContext3D();
389 #endif
390
372 void addSharedObject(WebGLSharedObject*); 391 void addSharedObject(WebGLSharedObject*);
373 void addContextObject(WebGLContextObject*); 392 void addContextObject(WebGLContextObject*);
374 void detachAndRemoveAllObjects(); 393 void detachAndRemoveAllObjects();
375 394
376 void destroyContext(); 395 void destroyContext();
377 void markContextChanged(ContentChangeType); 396 void markContextChanged(ContentChangeType);
378 397
379 // Query if the GL implementation is NPOT strict. 398 // Query if the GL implementation is NPOT strict.
380 bool isGLES2NPOTStrict() { return m_isGLES2NPOTStrict; } 399 bool isGLES2NPOTStrict() { return m_isGLES2NPOTStrict; }
381 // Query if depth_stencil buffer is supported. 400 // Query if depth_stencil buffer is supported.
(...skipping 14 matching lines...) Expand all
396 415
397 PassRefPtr<Image> drawImageIntoBuffer(Image*, int width, int height, const c har* functionName); 416 PassRefPtr<Image> drawImageIntoBuffer(Image*, int width, int height, const c har* functionName);
398 417
399 PassRefPtr<Image> videoFrameToImage(HTMLVideoElement*, BackingStoreCopy); 418 PassRefPtr<Image> videoFrameToImage(HTMLVideoElement*, BackingStoreCopy);
400 419
401 WebGLRenderbuffer* ensureEmulatedStencilBuffer(GLenum target, WebGLRenderbuf fer*); 420 WebGLRenderbuffer* ensureEmulatedStencilBuffer(GLenum target, WebGLRenderbuf fer*);
402 421
403 // Structure for rendering to a DrawingBuffer, instead of directly 422 // Structure for rendering to a DrawingBuffer, instead of directly
404 // to the back-buffer of m_context. 423 // to the back-buffer of m_context.
405 RefPtr<DrawingBuffer> m_drawingBuffer; 424 RefPtr<DrawingBuffer> m_drawingBuffer;
425 #if ENABLE(OILPAN)
426 RefPtr<WebGLSharedWebGraphicsContext3D> m_sharedWebGraphicsContext3D;
427 #endif
428
406 RefPtr<WebGLContextGroup> m_contextGroup; 429 RefPtr<WebGLContextGroup> m_contextGroup;
407 430
408 // Dispatches a context lost event once it is determined that one is needed. 431 // Dispatches a context lost event once it is determined that one is needed.
409 // This is used both for synthetic and real context losses. For real ones, i t's 432 // This is used both for synthetic and real context losses. For real ones, i t's
410 // likely that there's no JavaScript on the stack, but that might be depende nt 433 // likely that there's no JavaScript on the stack, but that might be depende nt
411 // on how exactly the platform discovers that the context was lost. For bett er 434 // on how exactly the platform discovers that the context was lost. For bett er
412 // portability we always defer the dispatch of the event. 435 // portability we always defer the dispatch of the event.
413 Timer<WebGLRenderingContextBase> m_dispatchContextLostEventTimer; 436 Timer<WebGLRenderingContextBase> m_dispatchContextLostEventTimer;
414 bool m_restoreAllowed; 437 bool m_restoreAllowed;
415 Timer<WebGLRenderingContextBase> m_restoreTimer; 438 Timer<WebGLRenderingContextBase> m_restoreTimer;
416 439
417 bool m_needsUpdate; 440 bool m_needsUpdate;
418 bool m_markedCanvasDirty; 441 bool m_markedCanvasDirty;
419 HashSet<WebGLContextObject*> m_contextObjects; 442 WillBeHeapHashSet<RawPtrWillBeWeakMember<WebGLContextObject> > m_contextObje cts;
420 443
421 OwnPtr<WebGLRenderingContextLostCallback> m_contextLostCallbackAdapter; 444 OwnPtrWillBeMember<WebGLRenderingContextLostCallback> m_contextLostCallbackA dapter;
422 OwnPtr<WebGLRenderingContextErrorMessageCallback> m_errorMessageCallbackAdap ter; 445 OwnPtrWillBeMember<WebGLRenderingContextErrorMessageCallback> m_errorMessage CallbackAdapter;
423 446
424 // List of bound VBO's. Used to maintain info about sizes for ARRAY_BUFFER a nd stored values for ELEMENT_ARRAY_BUFFER 447 // List of bound VBO's. Used to maintain info about sizes for ARRAY_BUFFER a nd stored values for ELEMENT_ARRAY_BUFFER
425 RefPtr<WebGLBuffer> m_boundArrayBuffer; 448 RefPtrWillBeMember<WebGLBuffer> m_boundArrayBuffer;
426 449
427 RefPtr<WebGLVertexArrayObjectOES> m_defaultVertexArrayObject; 450 RefPtrWillBeMember<WebGLVertexArrayObjectOES> m_defaultVertexArrayObject;
428 RefPtr<WebGLVertexArrayObjectOES> m_boundVertexArrayObject; 451 RefPtrWillBeMember<WebGLVertexArrayObjectOES> m_boundVertexArrayObject;
429 void setBoundVertexArrayObject(PassRefPtr<WebGLVertexArrayObjectOES> arrayOb ject) 452 void setBoundVertexArrayObject(PassRefPtrWillBeRawPtr<WebGLVertexArrayObject OES> arrayObject)
430 { 453 {
431 if (arrayObject) 454 if (arrayObject)
432 m_boundVertexArrayObject = arrayObject; 455 m_boundVertexArrayObject = arrayObject;
433 else 456 else
434 m_boundVertexArrayObject = m_defaultVertexArrayObject; 457 m_boundVertexArrayObject = m_defaultVertexArrayObject;
435 } 458 }
436 459
437 class VertexAttribValue { 460 class VertexAttribValue {
438 public: 461 public:
439 VertexAttribValue() 462 VertexAttribValue()
440 { 463 {
441 initValue(); 464 initValue();
442 } 465 }
443 466
444 void initValue() 467 void initValue()
445 { 468 {
446 value[0] = 0.0f; 469 value[0] = 0.0f;
447 value[1] = 0.0f; 470 value[1] = 0.0f;
448 value[2] = 0.0f; 471 value[2] = 0.0f;
449 value[3] = 1.0f; 472 value[3] = 1.0f;
450 } 473 }
451 474
452 GLfloat value[4]; 475 GLfloat value[4];
453 }; 476 };
454 Vector<VertexAttribValue> m_vertexAttribValue; 477 Vector<VertexAttribValue> m_vertexAttribValue;
455 unsigned m_maxVertexAttribs; 478 unsigned m_maxVertexAttribs;
456 RefPtr<WebGLBuffer> m_vertexAttrib0Buffer; 479 RefPtrWillBeMember<WebGLBuffer> m_vertexAttrib0Buffer;
457 long m_vertexAttrib0BufferSize; 480 long m_vertexAttrib0BufferSize;
458 GLfloat m_vertexAttrib0BufferValue[4]; 481 GLfloat m_vertexAttrib0BufferValue[4];
459 bool m_forceAttrib0BufferRefill; 482 bool m_forceAttrib0BufferRefill;
460 bool m_vertexAttrib0UsedBefore; 483 bool m_vertexAttrib0UsedBefore;
461 484
462 RefPtr<WebGLProgram> m_currentProgram; 485 RefPtrWillBeMember<WebGLProgram> m_currentProgram;
463 RefPtr<WebGLFramebuffer> m_framebufferBinding; 486 RefPtrWillBeMember<WebGLFramebuffer> m_framebufferBinding;
464 RefPtr<WebGLRenderbuffer> m_renderbufferBinding; 487 RefPtrWillBeMember<WebGLRenderbuffer> m_renderbufferBinding;
465 class TextureUnitState { 488
466 public: 489 WillBeHeapVector<TextureUnitState> m_textureUnits;
467 RefPtr<WebGLTexture> m_texture2DBinding;
468 RefPtr<WebGLTexture> m_textureCubeMapBinding;
469 };
470 Vector<TextureUnitState> m_textureUnits;
471 unsigned long m_activeTextureUnit; 490 unsigned long m_activeTextureUnit;
472 491
473 RefPtr<WebGLTexture> m_blackTexture2D; 492 RefPtrWillBeMember<WebGLTexture> m_blackTexture2D;
474 RefPtr<WebGLTexture> m_blackTextureCubeMap; 493 RefPtrWillBeMember<WebGLTexture> m_blackTextureCubeMap;
475 494
476 Vector<GLenum> m_compressedTextureFormats; 495 Vector<GLenum> m_compressedTextureFormats;
477 496
478 // Fixed-size cache of reusable image buffers for video texImage2D calls. 497 // Fixed-size cache of reusable image buffers for video texImage2D calls.
479 class LRUImageBufferCache { 498 class LRUImageBufferCache {
480 public: 499 public:
481 LRUImageBufferCache(int capacity); 500 LRUImageBufferCache(int capacity);
482 // The pointer returned is owned by the image buffer map. 501 // The pointer returned is owned by the image buffer map.
483 ImageBuffer* imageBuffer(const IntSize& size); 502 ImageBuffer* imageBuffer(const IntSize& size);
484 private: 503 private:
(...skipping 16 matching lines...) Expand all
501 bool m_drawBuffersWebGLRequirementsChecked; 520 bool m_drawBuffersWebGLRequirementsChecked;
502 bool m_drawBuffersSupported; 521 bool m_drawBuffersSupported;
503 522
504 GLint m_packAlignment; 523 GLint m_packAlignment;
505 GLint m_unpackAlignment; 524 GLint m_unpackAlignment;
506 bool m_unpackFlipY; 525 bool m_unpackFlipY;
507 bool m_unpackPremultiplyAlpha; 526 bool m_unpackPremultiplyAlpha;
508 GLenum m_unpackColorspaceConversion; 527 GLenum m_unpackColorspaceConversion;
509 bool m_contextLost; 528 bool m_contextLost;
510 LostContextMode m_contextLostMode; 529 LostContextMode m_contextLostMode;
511 RefPtr<WebGLContextAttributes> m_requestedAttributes; 530 RefPtrWillBeMember<WebGLContextAttributes> m_requestedAttributes;
512 531
513 bool m_layerCleared; 532 bool m_layerCleared;
514 GLfloat m_clearColor[4]; 533 GLfloat m_clearColor[4];
515 bool m_scissorEnabled; 534 bool m_scissorEnabled;
516 GLfloat m_clearDepth; 535 GLfloat m_clearDepth;
517 GLint m_clearStencil; 536 GLint m_clearStencil;
518 GLboolean m_colorMask[4]; 537 GLboolean m_colorMask[4];
519 GLboolean m_depthMask; 538 GLboolean m_depthMask;
520 539
521 bool m_stencilEnabled; 540 bool m_stencilEnabled;
(...skipping 16 matching lines...) Expand all
538 OwnPtr<Extensions3DUtil> m_extensionsUtil; 557 OwnPtr<Extensions3DUtil> m_extensionsUtil;
539 558
540 bool m_savingImage; 559 bool m_savingImage;
541 560
542 enum ExtensionFlags { 561 enum ExtensionFlags {
543 ApprovedExtension = 0x00, 562 ApprovedExtension = 0x00,
544 // Extension that is behind the draft extensions runtime flag: 563 // Extension that is behind the draft extensions runtime flag:
545 DraftExtension = 0x01, 564 DraftExtension = 0x01,
546 }; 565 };
547 566
548 class ExtensionTracker { 567 class ExtensionTracker : public NoBaseWillBeGarbageCollected<ExtensionTracke r> {
549 public: 568 public:
550 ExtensionTracker(ExtensionFlags flags, const char* const* prefixes) 569 ExtensionTracker(ExtensionFlags flags, const char* const* prefixes)
551 : m_draft(flags & DraftExtension) 570 : m_draft(flags & DraftExtension)
552 , m_prefixes(prefixes) 571 , m_prefixes(prefixes)
553 { 572 {
554 } 573 }
555 574
575 #if !ENABLE(OILPAN)
556 virtual ~ExtensionTracker() 576 virtual ~ExtensionTracker()
557 { 577 {
558 } 578 }
579 #endif
559 580
560 bool draft() const 581 bool draft() const
561 { 582 {
562 return m_draft; 583 return m_draft;
563 } 584 }
564 585
565 const char* const* prefixes() const; 586 const char* const* prefixes() const;
566 bool matchesNameWithPrefixes(const String&) const; 587 bool matchesNameWithPrefixes(const String&) const;
567 588
568 virtual PassRefPtr<WebGLExtension> getExtension(WebGLRenderingContextBas e*) = 0; 589 virtual PassRefPtrWillBeRawPtr<WebGLExtension> getExtension(WebGLRenderi ngContextBase*) = 0;
569 virtual bool supported(WebGLRenderingContextBase*) const = 0; 590 virtual bool supported(WebGLRenderingContextBase*) const = 0;
570 virtual const char* extensionName() const = 0; 591 virtual const char* extensionName() const = 0;
571 virtual void loseExtension() = 0; 592 virtual void loseExtension() = 0;
572 593
594 virtual void trace(Visitor*) { }
595
573 private: 596 private:
574 bool m_draft; 597 bool m_draft;
575 const char* const* m_prefixes; 598 const char* const* m_prefixes;
576 }; 599 };
577 600
578 template <typename T> 601 template <typename T>
579 class TypedExtensionTracker FINAL : public ExtensionTracker { 602 class TypedExtensionTracker FINAL : public ExtensionTracker {
580 public: 603 public:
581 TypedExtensionTracker(RefPtr<T>& extensionField, ExtensionFlags flags, c onst char* const* prefixes) 604 static PassOwnPtrWillBeRawPtr<TypedExtensionTracker<T> > create(RefPtrWi llBeMember<T>& extensionField, ExtensionFlags flags, const char* const* prefixes )
582 : ExtensionTracker(flags, prefixes)
583 , m_extensionField(extensionField)
584 , m_extension(nullptr)
585 { 605 {
606 return adoptPtrWillBeNoop(new TypedExtensionTracker<T>(extensionFiel d, flags, prefixes));
586 } 607 }
587 608
609 #if !ENABLE(OILPAN)
588 virtual ~TypedExtensionTracker() 610 virtual ~TypedExtensionTracker()
589 { 611 {
590 if (m_extension) { 612 if (m_extension) {
591 m_extension->lose(true); 613 m_extension->lose(true);
592 m_extension = nullptr; 614 m_extension = nullptr;
593 } 615 }
594 } 616 }
617 #endif
595 618
596 virtual PassRefPtr<WebGLExtension> getExtension(WebGLRenderingContextBas e* context) OVERRIDE 619 virtual PassRefPtrWillBeRawPtr<WebGLExtension> getExtension(WebGLRenderi ngContextBase* context) OVERRIDE
597 { 620 {
598 if (!m_extension) { 621 if (!m_extension) {
599 m_extension = T::create(context); 622 m_extension = T::create(context);
haraken 2014/07/15 15:04:56 Just to confirm: It's guaranteed that T holds a st
sof 2014/07/15 16:23:00 No, the extension (a WebGLExtension) holds a weak
haraken 2014/07/16 02:08:19 Then why don't we need to call m_extension->lose()
sof 2014/07/16 05:02:48 If the extension tracker dies, then WebGLRendering
600 m_extensionField = m_extension; 623 m_extensionField = m_extension;
601 } 624 }
602 625
603 return m_extension; 626 return m_extension;
604 } 627 }
605 628
606 virtual bool supported(WebGLRenderingContextBase* context) const OVERRID E 629 virtual bool supported(WebGLRenderingContextBase* context) const OVERRID E
607 { 630 {
608 return T::supported(context); 631 return T::supported(context);
609 } 632 }
610 633
611 virtual const char* extensionName() const OVERRIDE 634 virtual const char* extensionName() const OVERRIDE
612 { 635 {
613 return T::extensionName(); 636 return T::extensionName();
614 } 637 }
615 638
616 virtual void loseExtension() OVERRIDE 639 virtual void loseExtension() OVERRIDE
617 { 640 {
618 if (m_extension) { 641 if (m_extension) {
619 m_extension->lose(false); 642 m_extension->lose(false);
620 if (m_extension->isLost()) 643 if (m_extension->isLost())
621 m_extension = nullptr; 644 m_extension = nullptr;
622 } 645 }
623 } 646 }
624 647
648 virtual void trace(Visitor* visitor) OVERRIDE
649 {
650 visitor->trace(m_extension);
651 visitor->trace(m_extensionField);
652 ExtensionTracker::trace(visitor);
653 }
654
625 private: 655 private:
626 RefPtr<T>& m_extensionField; 656 TypedExtensionTracker(RefPtrWillBeMember<T>& extensionField, ExtensionFl ags flags, const char* const* prefixes)
657 : ExtensionTracker(flags, prefixes)
658 , m_extensionField(extensionField)
659 {
660 }
661
662 RefPtrWillBeMember<T>& m_extensionField;
627 // ExtensionTracker holds it's own reference to the extension to ensure 663 // ExtensionTracker holds it's own reference to the extension to ensure
628 // that it is not deleted before this object's destructor is called 664 // that it is not deleted before this object's destructor is called
629 RefPtr<T> m_extension; 665 RefPtrWillBeMember<T> m_extension;
630 }; 666 };
631 667
632 bool m_extensionEnabled[WebGLExtensionNameCount]; 668 bool m_extensionEnabled[WebGLExtensionNameCount];
633 Vector<ExtensionTracker*> m_extensions; 669 WillBeHeapVector<OwnPtrWillBeMember<ExtensionTracker> > m_extensions;
634 670
635 template <typename T> 671 template <typename T>
636 void registerExtension(RefPtr<T>& extensionPtr, ExtensionFlags flags = Appro vedExtension, const char* const* prefixes = 0) 672 void registerExtension(RefPtrWillBeMember<T>& extensionPtr, ExtensionFlags f lags = ApprovedExtension, const char* const* prefixes = 0)
637 { 673 {
638 m_extensions.append(new TypedExtensionTracker<T>(extensionPtr, flags, pr efixes)); 674 m_extensions.append(TypedExtensionTracker<T>::create(extensionPtr, flags , prefixes));
639 } 675 }
640 676
641 bool extensionSupportedAndAllowed(const ExtensionTracker*); 677 bool extensionSupportedAndAllowed(const ExtensionTracker*);
642 678
643 inline bool extensionEnabled(WebGLExtensionName name) 679 inline bool extensionEnabled(WebGLExtensionName name)
644 { 680 {
645 return m_extensionEnabled[name]; 681 return m_extensionEnabled[name];
646 } 682 }
647 683
648 // Errors raised by synthesizeGLError() while the context is lost. 684 // Errors raised by synthesizeGLError() while the context is lost.
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
902 // Return the least recently used context's position in the active context v ector. 938 // Return the least recently used context's position in the active context v ector.
903 // If the vector is empty, return the maximum allowed active context number. 939 // If the vector is empty, return the maximum allowed active context number.
904 static size_t oldestContextIndex(); 940 static size_t oldestContextIndex();
905 static IntSize oldestContextSize(); 941 static IntSize oldestContextSize();
906 }; 942 };
907 943
908 DEFINE_TYPE_CASTS(WebGLRenderingContextBase, CanvasRenderingContext, context, co ntext->is3d(), context.is3d()); 944 DEFINE_TYPE_CASTS(WebGLRenderingContextBase, CanvasRenderingContext, context, co ntext->is3d(), context.is3d());
909 945
910 } // namespace WebCore 946 } // namespace WebCore
911 947
948 WTF_ALLOW_MOVE_INIT_AND_COMPARE_WITH_MEM_FUNCTIONS(WebCore::WebGLRenderingContex tBase::TextureUnitState);
949
912 #endif // WebGLRenderingContextBase_h 950 #endif // WebGLRenderingContextBase_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698