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

Unified Diff: sky/engine/core/html/canvas/WebGLRenderingContextBase.h

Issue 1001913003: Remove <canvas> (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: sky/engine/core/html/canvas/WebGLRenderingContextBase.h
diff --git a/sky/engine/core/html/canvas/WebGLRenderingContextBase.h b/sky/engine/core/html/canvas/WebGLRenderingContextBase.h
deleted file mode 100644
index 7ccb82703effcbc6e3822acbec81890c6d76c137..0000000000000000000000000000000000000000
--- a/sky/engine/core/html/canvas/WebGLRenderingContextBase.h
+++ /dev/null
@@ -1,942 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef SKY_ENGINE_CORE_HTML_CANVAS_WEBGLRENDERINGCONTEXTBASE_H_
-#define SKY_ENGINE_CORE_HTML_CANVAS_WEBGLRENDERINGCONTEXTBASE_H_
-
-#include "sky/engine/bindings/nullable.h"
-#include "sky/engine/core/dom/ActiveDOMObject.h"
-#include "sky/engine/core/html/canvas/CanvasRenderingContext.h"
-#include "sky/engine/core/html/canvas/WebGLExtensionName.h"
-#include "sky/engine/core/html/canvas/WebGLGetInfo.h"
-#include "sky/engine/core/page/Page.h"
-#include "sky/engine/core/rendering/RenderBoxModelObject.h"
-#include "sky/engine/platform/Timer.h"
-#include "sky/engine/platform/graphics/GraphicsTypes3D.h"
-#include "sky/engine/platform/graphics/ImageBuffer.h"
-#include "sky/engine/platform/graphics/gpu/DrawingBuffer.h"
-#include "sky/engine/platform/graphics/gpu/Extensions3DUtil.h"
-#include "sky/engine/platform/graphics/gpu/WebGLImageConversion.h"
-#include "sky/engine/public/platform/WebGraphicsContext3D.h"
-#include "sky/engine/wtf/Float32Array.h"
-#include "sky/engine/wtf/Int32Array.h"
-#include "sky/engine/wtf/OwnPtr.h"
-#include "sky/engine/wtf/text/WTFString.h"
-
-namespace blink {
-class WebLayer;
-}
-
-namespace blink {
-
-class ANGLEInstancedArrays;
-class EXTBlendMinMax;
-class EXTFragDepth;
-class EXTShaderTextureLOD;
-class EXTTextureFilterAnisotropic;
-class ExceptionState;
-class HTMLImageElement;
-class ImageBuffer;
-class ImageData;
-class IntSize;
-class OESElementIndexUint;
-class OESStandardDerivatives;
-class OESTextureFloat;
-class OESTextureFloatLinear;
-class OESTextureHalfFloat;
-class OESTextureHalfFloatLinear;
-class OESVertexArrayObject;
-class WebGLActiveInfo;
-class WebGLBuffer;
-class WebGLCompressedTextureATC;
-class WebGLCompressedTextureETC1;
-class WebGLCompressedTexturePVRTC;
-class WebGLCompressedTextureS3TC;
-class WebGLContextAttributes;
-class WebGLContextGroup;
-class WebGLContextObject;
-class WebGLDebugRendererInfo;
-class WebGLDebugShaders;
-class WebGLDepthTexture;
-class WebGLDrawBuffers;
-class WebGLExtension;
-class WebGLFramebuffer;
-class WebGLLoseContext;
-class WebGLObject;
-class WebGLProgram;
-class WebGLRenderbuffer;
-class WebGLShader;
-class WebGLShaderPrecisionFormat;
-class WebGLSharedObject;
-class WebGLSharedWebGraphicsContext3D;
-class WebGLTexture;
-class WebGLUniformLocation;
-class WebGLVertexArrayObjectOES;
-
-class WebGLRenderingContextLostCallback;
-class WebGLRenderingContextErrorMessageCallback;
-
-class WebGLRenderingContextBase: public CanvasRenderingContext, public ActiveDOMObject, public Page::MultisamplingChangedObserver {
-public:
- virtual ~WebGLRenderingContextBase();
-
- virtual unsigned version() const = 0;
- virtual String contextName() const = 0;
- virtual void registerContextExtensions() = 0;
-
- static unsigned getWebGLVersion(const CanvasRenderingContext*);
-
- int drawingBufferWidth() const;
- int drawingBufferHeight() const;
-
- void activeTexture(GLenum texture);
- void attachShader(WebGLProgram*, WebGLShader*);
- void bindAttribLocation(WebGLProgram*, GLuint index, const String& name);
- void bindBuffer(GLenum target, WebGLBuffer*);
- void bindFramebuffer(GLenum target, WebGLFramebuffer*);
- void bindRenderbuffer(GLenum target, WebGLRenderbuffer*);
- void bindTexture(GLenum target, WebGLTexture*);
- void blendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
- void blendEquation(GLenum mode);
- void blendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
- void blendFunc(GLenum sfactor, GLenum dfactor);
- void blendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
-
- void bufferData(GLenum target, long long size, GLenum usage);
- void bufferData(GLenum target, ArrayBuffer* data, GLenum usage);
- void bufferData(GLenum target, ArrayBufferView* data, GLenum usage);
- void bufferSubData(GLenum target, long long offset, ArrayBuffer* data);
- void bufferSubData(GLenum target, long long offset, ArrayBufferView* data);
-
- GLenum checkFramebufferStatus(GLenum target);
- void clear(GLbitfield mask);
- void clearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
- void clearDepth(GLfloat);
- void clearStencil(GLint);
- void colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
- void compileShader(WebGLShader*);
-
- void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, ArrayBufferView* data);
- void compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, ArrayBufferView* data);
-
- void copyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
- void copyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
-
- PassRefPtr<WebGLBuffer> createBuffer();
- PassRefPtr<WebGLFramebuffer> createFramebuffer();
- PassRefPtr<WebGLProgram> createProgram();
- PassRefPtr<WebGLRenderbuffer> createRenderbuffer();
- PassRefPtr<WebGLShader> createShader(GLenum type);
- PassRefPtr<WebGLTexture> createTexture();
-
- void cullFace(GLenum mode);
-
- void deleteBuffer(WebGLBuffer*);
- void deleteFramebuffer(WebGLFramebuffer*);
- void deleteProgram(WebGLProgram*);
- void deleteRenderbuffer(WebGLRenderbuffer*);
- void deleteShader(WebGLShader*);
- void deleteTexture(WebGLTexture*);
-
- void depthFunc(GLenum);
- void depthMask(GLboolean);
- void depthRange(GLfloat zNear, GLfloat zFar);
- void detachShader(WebGLProgram*, WebGLShader*);
- void disable(GLenum cap);
- void disableVertexAttribArray(GLuint index);
- void drawArrays(GLenum mode, GLint first, GLsizei count);
- void drawElements(GLenum mode, GLsizei count, GLenum type, long long offset);
-
- void drawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei count, GLsizei primcount);
- void drawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum type, long long offset, GLsizei primcount);
-
- void enable(GLenum cap);
- void enableVertexAttribArray(GLuint index);
- void finish();
- void flush();
- void framebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, WebGLRenderbuffer*);
- void framebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, WebGLTexture*, GLint level);
- void frontFace(GLenum mode);
- void generateMipmap(GLenum target);
-
- PassRefPtr<WebGLActiveInfo> getActiveAttrib(WebGLProgram*, GLuint index);
- PassRefPtr<WebGLActiveInfo> getActiveUniform(WebGLProgram*, GLuint index);
- bool getAttachedShaders(WebGLProgram*, Vector<RefPtr<WebGLShader> >&);
- Nullable<Vector<RefPtr<WebGLShader> > > getAttachedShaders(WebGLProgram*);
- GLint getAttribLocation(WebGLProgram*, const String& name);
- WebGLGetInfo getBufferParameter(GLenum target, GLenum pname);
- PassRefPtr<WebGLContextAttributes> getContextAttributes();
- GLenum getError();
- PassRefPtr<WebGLExtension> getExtension(const String& name);
- WebGLGetInfo getFramebufferAttachmentParameter(GLenum target, GLenum attachment, GLenum pname);
- WebGLGetInfo getParameter(GLenum pname);
- WebGLGetInfo getProgramParameter(WebGLProgram*, GLenum pname);
- String getProgramInfoLog(WebGLProgram*);
- WebGLGetInfo getRenderbufferParameter(GLenum target, GLenum pname);
- WebGLGetInfo getShaderParameter(WebGLShader*, GLenum pname);
- String getShaderInfoLog(WebGLShader*);
- PassRefPtr<WebGLShaderPrecisionFormat> getShaderPrecisionFormat(GLenum shaderType, GLenum precisionType);
- String getShaderSource(WebGLShader*);
- Nullable<Vector<String> > getSupportedExtensions();
- WebGLGetInfo getTexParameter(GLenum target, GLenum pname);
- WebGLGetInfo getUniform(WebGLProgram*, const WebGLUniformLocation*);
- PassRefPtr<WebGLUniformLocation> getUniformLocation(WebGLProgram*, const String&);
- WebGLGetInfo getVertexAttrib(GLuint index, GLenum pname);
- long long getVertexAttribOffset(GLuint index, GLenum pname);
-
- void hint(GLenum target, GLenum mode);
- GLboolean isBuffer(WebGLBuffer*);
- bool isContextLost() const;
- GLboolean isEnabled(GLenum cap);
- GLboolean isFramebuffer(WebGLFramebuffer*);
- GLboolean isProgram(WebGLProgram*);
- GLboolean isRenderbuffer(WebGLRenderbuffer*);
- GLboolean isShader(WebGLShader*);
- GLboolean isTexture(WebGLTexture*);
-
- void lineWidth(GLfloat);
- void linkProgram(WebGLProgram*);
- void pixelStorei(GLenum pname, GLint param);
- void polygonOffset(GLfloat factor, GLfloat units);
- void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, ArrayBufferView* pixels);
- void renderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
- void sampleCoverage(GLfloat value, GLboolean invert);
- void scissor(GLint x, GLint y, GLsizei width, GLsizei height);
- void shaderSource(WebGLShader*, const String&);
- void stencilFunc(GLenum func, GLint ref, GLuint mask);
- void stencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
- void stencilMask(GLuint);
- void stencilMaskSeparate(GLenum face, GLuint mask);
- void stencilOp(GLenum fail, GLenum zfail, GLenum zpass);
- void stencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
-
- void texImage2D(GLenum target, GLint level, GLenum internalformat,
- GLsizei width, GLsizei height, GLint border,
- GLenum format, GLenum type, ArrayBufferView*, ExceptionState&);
- void texImage2D(GLenum target, GLint level, GLenum internalformat,
- GLenum format, GLenum type, ImageData*, ExceptionState&);
- void texImage2D(GLenum target, GLint level, GLenum internalformat,
- GLenum format, GLenum type, HTMLImageElement*, ExceptionState&);
- void texImage2D(GLenum target, GLint level, GLenum internalformat,
- GLenum format, GLenum type, HTMLCanvasElement*, ExceptionState&);
-
- void texParameterf(GLenum target, GLenum pname, GLfloat param);
- void texParameteri(GLenum target, GLenum pname, GLint param);
-
- void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
- GLsizei width, GLsizei height,
- GLenum format, GLenum type, ArrayBufferView*, ExceptionState&);
- void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
- GLenum format, GLenum type, ImageData*, ExceptionState&);
- void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
- GLenum format, GLenum type, HTMLImageElement*, ExceptionState&);
- void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
- GLenum format, GLenum type, HTMLCanvasElement*, ExceptionState&);
-
- void uniform1f(const WebGLUniformLocation*, GLfloat x);
- void uniform1fv(const WebGLUniformLocation*, Float32Array* v);
- void uniform1fv(const WebGLUniformLocation*, GLfloat* v, GLsizei);
- void uniform1i(const WebGLUniformLocation*, GLint x);
- void uniform1iv(const WebGLUniformLocation*, Int32Array* v);
- void uniform1iv(const WebGLUniformLocation*, GLint* v, GLsizei);
- void uniform2f(const WebGLUniformLocation*, GLfloat x, GLfloat y);
- void uniform2fv(const WebGLUniformLocation*, Float32Array* v);
- void uniform2fv(const WebGLUniformLocation*, GLfloat* v, GLsizei);
- void uniform2i(const WebGLUniformLocation*, GLint x, GLint y);
- void uniform2iv(const WebGLUniformLocation*, Int32Array* v);
- void uniform2iv(const WebGLUniformLocation*, GLint* v, GLsizei);
- void uniform3f(const WebGLUniformLocation*, GLfloat x, GLfloat y, GLfloat z);
- void uniform3fv(const WebGLUniformLocation*, Float32Array* v);
- void uniform3fv(const WebGLUniformLocation*, GLfloat* v, GLsizei);
- void uniform3i(const WebGLUniformLocation*, GLint x, GLint y, GLint z);
- void uniform3iv(const WebGLUniformLocation*, Int32Array* v);
- void uniform3iv(const WebGLUniformLocation*, GLint* v, GLsizei);
- void uniform4f(const WebGLUniformLocation*, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
- void uniform4fv(const WebGLUniformLocation*, Float32Array* v);
- void uniform4fv(const WebGLUniformLocation*, GLfloat* v, GLsizei);
- void uniform4i(const WebGLUniformLocation*, GLint x, GLint y, GLint z, GLint w);
- void uniform4iv(const WebGLUniformLocation*, Int32Array* v);
- void uniform4iv(const WebGLUniformLocation*, GLint* v, GLsizei);
- void uniformMatrix2fv(const WebGLUniformLocation*, GLboolean transpose, Float32Array* value);
- void uniformMatrix2fv(const WebGLUniformLocation*, GLboolean transpose, GLfloat* value, GLsizei);
- void uniformMatrix3fv(const WebGLUniformLocation*, GLboolean transpose, Float32Array* value);
- void uniformMatrix3fv(const WebGLUniformLocation*, GLboolean transpose, GLfloat* value, GLsizei);
- void uniformMatrix4fv(const WebGLUniformLocation*, GLboolean transpose, Float32Array* value);
- void uniformMatrix4fv(const WebGLUniformLocation*, GLboolean transpose, GLfloat* value, GLsizei);
-
- void useProgram(WebGLProgram*);
- void validateProgram(WebGLProgram*);
-
- void vertexAttrib1f(GLuint index, GLfloat x);
- void vertexAttrib1fv(GLuint index, Float32Array* values);
- void vertexAttrib1fv(GLuint index, GLfloat* values, GLsizei);
- void vertexAttrib2f(GLuint index, GLfloat x, GLfloat y);
- void vertexAttrib2fv(GLuint index, Float32Array* values);
- void vertexAttrib2fv(GLuint index, GLfloat* values, GLsizei);
- void vertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z);
- void vertexAttrib3fv(GLuint index, Float32Array* values);
- void vertexAttrib3fv(GLuint index, GLfloat* values, GLsizei);
- void vertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
- void vertexAttrib4fv(GLuint index, Float32Array* values);
- void vertexAttrib4fv(GLuint index, GLfloat* values, GLsizei);
- void vertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized,
- GLsizei stride, long long offset);
-
- void vertexAttribDivisorANGLE(GLuint index, GLuint divisor);
-
- void viewport(GLint x, GLint y, GLsizei width, GLsizei height);
-
- // WEBGL_lose_context support
- enum LostContextMode {
- NotLostContext,
-
- // Lost context occurred at the graphics system level.
- RealLostContext,
-
- // Lost context provoked by WEBGL_lose_context.
- WebGLLoseContextLostContext,
-
- // Lost context occurred due to internal implementation reasons.
- SyntheticLostContext,
- };
- enum AutoRecoveryMethod {
- // Don't restore automatically.
- Manual,
-
- // Restore when resources are available.
- WhenAvailable,
-
- // Restore as soon as possible.
- Auto
- };
- void forceLostContext(LostContextMode, AutoRecoveryMethod);
- void forceRestoreContext();
- void loseContextImpl(LostContextMode, AutoRecoveryMethod);
-
- blink::WebGraphicsContext3D* webContext() const { return drawingBuffer()->context(); }
- WebGLContextGroup* contextGroup() const { return m_contextGroup.get(); }
- Extensions3DUtil* extensionsUtil();
-
- void reshape(int width, int height);
-
- void markLayerComposited();
- PassRefPtr<ImageData> paintRenderingResultsToImageData();
-
- void removeSharedObject(WebGLSharedObject*);
- void removeContextObject(WebGLContextObject*);
-
- unsigned maxVertexAttribs() const { return m_maxVertexAttribs; }
-
- // ActiveDOMObject notifications
- virtual bool hasPendingActivity() const override;
- virtual void stop() override;
-
- void setSavingImage(bool isSaving) { m_savingImage = isSaving; }
-
- class TextureUnitState {
- ALLOW_ONLY_INLINE_ALLOCATION();
- public:
- RefPtr<WebGLTexture> m_texture2DBinding;
- RefPtr<WebGLTexture> m_textureCubeMapBinding;
- };
-
-protected:
- friend class WebGLDrawBuffers;
- friend class WebGLFramebuffer;
- friend class WebGLObject;
- friend class WebGLContextObject;
- friend class OESVertexArrayObject;
- friend class WebGLDebugShaders;
- friend class WebGLCompressedTextureATC;
- friend class WebGLCompressedTextureETC1;
- friend class WebGLCompressedTexturePVRTC;
- friend class WebGLCompressedTextureS3TC;
- friend class WebGLRenderingContextErrorMessageCallback;
- friend class WebGLVertexArrayObjectOES;
- friend class ScopedTexture2DRestorer;
-
- WebGLRenderingContextBase(HTMLCanvasElement*, PassOwnPtr<blink::WebGraphicsContext3D>, WebGLContextAttributes*);
- PassRefPtr<DrawingBuffer> createDrawingBuffer(PassOwnPtr<blink::WebGraphicsContext3D>);
- void initializeNewContext();
- void setupFlags();
-
-#if ENABLE(OILPAN)
- PassRefPtr<WebGLSharedWebGraphicsContext3D> sharedWebGraphicsContext3D() const;
-#endif
-
- // CanvasRenderingContext implementation.
- virtual bool is3d() const override { return true; }
- virtual bool isAccelerated() const override { return true; }
- virtual void setIsHidden(bool) override;
- virtual void paintRenderingResultsToCanvas() override;
- virtual blink::WebLayer* platformLayer() const override;
-
- void addSharedObject(WebGLSharedObject*);
- void addContextObject(WebGLContextObject*);
- void detachAndRemoveAllObjects();
-
- void destroyContext();
- void markContextChanged(ContentChangeType);
-
- // Query if the GL implementation is NPOT strict.
- bool isGLES2NPOTStrict() { return m_isGLES2NPOTStrict; }
- // Query if depth_stencil buffer is supported.
- bool isDepthStencilSupported() { return m_isDepthStencilSupported; }
-
- // Helper to return the size in bytes of OpenGL data types
- // like GL_FLOAT, GL_INT, etc.
- unsigned sizeInBytes(GLenum type);
-
- // Check if each enabled vertex attribute is bound to a buffer.
- bool validateRenderingState(const char*);
-
- bool validateWebGLObject(const char*, WebGLObject*);
-
- // Adds a compressed texture format.
- void addCompressedTextureFormat(GLenum);
- void removeAllCompressedTextureFormats();
-
- PassRefPtr<Image> drawImageIntoBuffer(Image*, int width, int height, const char* functionName);
-
- WebGLRenderbuffer* ensureEmulatedStencilBuffer(GLenum target, WebGLRenderbuffer*);
-
- // Structure for rendering to a DrawingBuffer, instead of directly
- // to the back-buffer of m_context.
-#if ENABLE(OILPAN)
- RefPtr<WebGLSharedWebGraphicsContext3D> m_sharedWebGraphicsContext3D;
-#else
- RefPtr<DrawingBuffer> m_drawingBuffer;
-#endif
- DrawingBuffer* drawingBuffer() const;
-
- RefPtr<WebGLContextGroup> m_contextGroup;
-
- LostContextMode m_contextLostMode;
- AutoRecoveryMethod m_autoRecoveryMethod;
- // Dispatches a context lost event once it is determined that one is needed.
- // This is used for synthetic, WEBGL_lose_context and real context losses. For real ones, it's
- // likely that there's no JavaScript on the stack, but that might be dependent
- // on how exactly the platform discovers that the context was lost. For better
- // portability we always defer the dispatch of the event.
- Timer<WebGLRenderingContextBase> m_dispatchContextLostEventTimer;
- bool m_restoreAllowed;
- Timer<WebGLRenderingContextBase> m_restoreTimer;
-
- bool m_needsUpdate;
- bool m_markedCanvasDirty;
- HashSet<RawPtr<WebGLContextObject> > m_contextObjects;
-
- OwnPtr<WebGLRenderingContextLostCallback> m_contextLostCallbackAdapter;
- OwnPtr<WebGLRenderingContextErrorMessageCallback> m_errorMessageCallbackAdapter;
-
- // List of bound VBO's. Used to maintain info about sizes for ARRAY_BUFFER and stored values for ELEMENT_ARRAY_BUFFER
- RefPtr<WebGLBuffer> m_boundArrayBuffer;
-
- RefPtr<WebGLVertexArrayObjectOES> m_defaultVertexArrayObject;
- RefPtr<WebGLVertexArrayObjectOES> m_boundVertexArrayObject;
- void setBoundVertexArrayObject(PassRefPtr<WebGLVertexArrayObjectOES> arrayObject)
- {
- if (arrayObject)
- m_boundVertexArrayObject = arrayObject;
- else
- m_boundVertexArrayObject = m_defaultVertexArrayObject;
- }
-
- class VertexAttribValue {
- public:
- VertexAttribValue()
- {
- initValue();
- }
-
- void initValue()
- {
- value[0] = 0.0f;
- value[1] = 0.0f;
- value[2] = 0.0f;
- value[3] = 1.0f;
- }
-
- GLfloat value[4];
- };
- Vector<VertexAttribValue> m_vertexAttribValue;
- unsigned m_maxVertexAttribs;
- RefPtr<WebGLBuffer> m_vertexAttrib0Buffer;
- long m_vertexAttrib0BufferSize;
- GLfloat m_vertexAttrib0BufferValue[4];
- bool m_forceAttrib0BufferRefill;
- bool m_vertexAttrib0UsedBefore;
-
- RefPtr<WebGLProgram> m_currentProgram;
- RefPtr<WebGLFramebuffer> m_framebufferBinding;
- RefPtr<WebGLRenderbuffer> m_renderbufferBinding;
-
- Vector<TextureUnitState> m_textureUnits;
- unsigned long m_activeTextureUnit;
-
- RefPtr<WebGLTexture> m_blackTexture2D;
- RefPtr<WebGLTexture> m_blackTextureCubeMap;
-
- Vector<GLenum> m_compressedTextureFormats;
-
- // Fixed-size cache of reusable image buffers for video texImage2D calls.
- class LRUImageBufferCache {
- public:
- LRUImageBufferCache(int capacity);
- // The pointer returned is owned by the image buffer map.
- ImageBuffer* imageBuffer(const IntSize& size);
- private:
- void bubbleToFront(int idx);
- OwnPtr<OwnPtr<ImageBuffer>[]> m_buffers;
- int m_capacity;
- };
- LRUImageBufferCache m_generatedImageCache;
-
- GLint m_maxTextureSize;
- GLint m_maxCubeMapTextureSize;
- GLint m_maxRenderbufferSize;
- GLint m_maxViewportDims[2];
- GLint m_maxTextureLevel;
- GLint m_maxCubeMapTextureLevel;
-
- GLint m_maxDrawBuffers;
- GLint m_maxColorAttachments;
- GLenum m_backDrawBuffer;
- bool m_drawBuffersWebGLRequirementsChecked;
- bool m_drawBuffersSupported;
-
- GLint m_packAlignment;
- GLint m_unpackAlignment;
- bool m_unpackFlipY;
- bool m_unpackPremultiplyAlpha;
- GLenum m_unpackColorspaceConversion;
- RefPtr<WebGLContextAttributes> m_requestedAttributes;
-
- bool m_layerCleared;
- GLfloat m_clearColor[4];
- bool m_scissorEnabled;
- GLfloat m_clearDepth;
- GLint m_clearStencil;
- GLboolean m_colorMask[4];
- GLboolean m_depthMask;
-
- bool m_stencilEnabled;
- GLuint m_stencilMask, m_stencilMaskBack;
- GLint m_stencilFuncRef, m_stencilFuncRefBack; // Note that these are the user specified values, not the internal clamped value.
- GLuint m_stencilFuncMask, m_stencilFuncMaskBack;
-
- bool m_isGLES2NPOTStrict;
- bool m_isDepthStencilSupported;
-
- bool m_synthesizedErrorsToConsole;
- int m_numGLErrorsToConsoleAllowed;
-
- bool m_multisamplingAllowed;
- bool m_multisamplingObserverRegistered;
-
- unsigned long m_onePlusMaxNonDefaultTextureUnit;
-
- OwnPtr<Extensions3DUtil> m_extensionsUtil;
-
- bool m_savingImage;
-
- enum ExtensionFlags {
- ApprovedExtension = 0x00,
- // Extension that is behind the draft extensions runtime flag:
- DraftExtension = 0x01,
- };
-
- class ExtensionTracker {
- public:
- ExtensionTracker(ExtensionFlags flags, const char* const* prefixes)
- : m_draft(flags & DraftExtension)
- , m_prefixes(prefixes)
- {
- }
-
-#if !ENABLE(OILPAN)
- virtual ~ExtensionTracker()
- {
- }
-#endif
-
- bool draft() const
- {
- return m_draft;
- }
-
- const char* const* prefixes() const;
- bool matchesNameWithPrefixes(const String&) const;
-
- virtual PassRefPtr<WebGLExtension> getExtension(WebGLRenderingContextBase*) = 0;
- virtual bool supported(WebGLRenderingContextBase*) const = 0;
- virtual const char* extensionName() const = 0;
- virtual void loseExtension() = 0;
-
- private:
- bool m_draft;
- const char* const* m_prefixes;
- };
-
- template <typename T>
- class TypedExtensionTracker final : public ExtensionTracker {
- public:
- static PassOwnPtr<TypedExtensionTracker<T> > create(RefPtr<T>& extensionField, ExtensionFlags flags, const char* const* prefixes)
- {
- return adoptPtr(new TypedExtensionTracker<T>(extensionField, flags, prefixes));
- }
-
-#if !ENABLE(OILPAN)
- virtual ~TypedExtensionTracker()
- {
- if (m_extension) {
- m_extension->lose(true);
- m_extension = nullptr;
- }
- }
-#endif
-
- virtual PassRefPtr<WebGLExtension> getExtension(WebGLRenderingContextBase* context) override
- {
- if (!m_extension) {
- m_extension = T::create(context);
- m_extensionField = m_extension;
- }
-
- return m_extension;
- }
-
- virtual bool supported(WebGLRenderingContextBase* context) const override
- {
- return T::supported(context);
- }
-
- virtual const char* extensionName() const override
- {
- return T::extensionName();
- }
-
- virtual void loseExtension() override
- {
- if (m_extension) {
- m_extension->lose(false);
- if (m_extension->isLost())
- m_extension = nullptr;
- }
- }
-
- private:
- TypedExtensionTracker(RefPtr<T>& extensionField, ExtensionFlags flags, const char* const* prefixes)
- : ExtensionTracker(flags, prefixes)
- , m_extensionField(extensionField)
- {
- }
-
- RefPtr<T>& m_extensionField;
- // ExtensionTracker holds it's own reference to the extension to ensure
- // that it is not deleted before this object's destructor is called
- RefPtr<T> m_extension;
- };
-
- bool m_extensionEnabled[WebGLExtensionNameCount];
- Vector<OwnPtr<ExtensionTracker> > m_extensions;
-
- template <typename T>
- void registerExtension(RefPtr<T>& extensionPtr, ExtensionFlags flags = ApprovedExtension, const char* const* prefixes = 0)
- {
- m_extensions.append(TypedExtensionTracker<T>::create(extensionPtr, flags, prefixes));
- }
-
- bool extensionSupportedAndAllowed(const ExtensionTracker*);
-
- inline bool extensionEnabled(WebGLExtensionName name)
- {
- return m_extensionEnabled[name];
- }
-
- // Errors raised by synthesizeGLError() while the context is lost.
- Vector<GLenum> m_lostContextErrors;
-
- // Helpers for getParameter and others
- WebGLGetInfo getBooleanParameter(GLenum);
- WebGLGetInfo getBooleanArrayParameter(GLenum);
- WebGLGetInfo getFloatParameter(GLenum);
- WebGLGetInfo getIntParameter(GLenum);
- WebGLGetInfo getUnsignedIntParameter(GLenum);
- WebGLGetInfo getWebGLFloatArrayParameter(GLenum);
- WebGLGetInfo getWebGLIntArrayParameter(GLenum);
-
- // Clear the backbuffer if it was composited since the last operation.
- // clearMask is set to the bitfield of any clear that would happen anyway at this time
- // and the function returns true if that clear is now unnecessary.
- bool clearIfComposited(GLbitfield clearMask = 0);
-
- // Helper to restore state that clearing the framebuffer may destroy.
- void restoreStateAfterClear();
-
- // Convert texture internal format.
- GLenum convertTexInternalFormat(GLenum internalformat, GLenum type);
-
- void texImage2DBase(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels, ExceptionState&);
- void texImage2DImpl(GLenum target, GLint level, GLenum internalformat, GLenum format, GLenum type, Image*, WebGLImageConversion::ImageHtmlDomSource, bool flipY, bool premultiplyAlpha, ExceptionState&);
- void texSubImage2DBase(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels, ExceptionState&);
- void texSubImage2DImpl(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLenum format, GLenum type, Image*, WebGLImageConversion::ImageHtmlDomSource, bool flipY, bool premultiplyAlpha, ExceptionState&);
-
- void handleTextureCompleteness(const char*, bool);
- void createFallbackBlackTextures1x1();
-
- // Helper function for copyTex{Sub}Image, check whether the internalformat
- // and the color buffer format of the current bound framebuffer combination
- // is valid.
- bool isTexInternalFormatColorBufferCombinationValid(GLenum texInternalFormat, GLenum colorBufferFormat);
-
- // Helper function to get the bound framebuffer's color buffer format.
- GLenum boundFramebufferColorFormat();
-
- // Helper function to verify limits on the length of uniform and attribute locations.
- bool validateLocationLength(const char* functionName, const String&);
-
- // Helper function to check if size is non-negative.
- // Generate GL error and return false for negative inputs; otherwise, return true.
- bool validateSize(const char* functionName, GLint x, GLint y);
-
- // Helper function to check if all characters in the string belong to the
- // ASCII subset as defined in GLSL ES 1.0 spec section 3.1.
- bool validateString(const char* functionName, const String&);
-
- // Helper function to check target and texture bound to the target.
- // Generate GL errors and return 0 if target is invalid or texture bound is
- // null. Otherwise, return the texture bound to the target.
- WebGLTexture* validateTextureBinding(const char* functionName, GLenum target, bool useSixEnumsForCubeMap);
-
- // Helper function to check input format/type for functions {copy}Tex{Sub}Image.
- // Generates GL error and returns false if parameters are invalid.
- bool validateTexFuncFormatAndType(const char* functionName, GLenum format, GLenum type, GLint level);
-
- // Helper function to check input level for functions {copy}Tex{Sub}Image.
- // Generates GL error and returns false if level is invalid.
- bool validateTexFuncLevel(const char* functionName, GLenum target, GLint level);
-
- // Helper function to check if a 64-bit value is non-negative and can fit into a 32-bit integer.
- // Generates GL error and returns false if not.
- bool validateValueFitNonNegInt32(const char* functionName, const char* paramName, long long value);
-
- enum TexFuncValidationFunctionType {
- NotTexSubImage2D,
- TexSubImage2D,
- };
-
- enum TexFuncValidationSourceType {
- SourceArrayBufferView,
- SourceImageData,
- SourceHTMLImageElement,
- SourceHTMLCanvasElement,
- };
-
- // Helper function for tex{Sub}Image2D to check if the input format/type/level/target/width/height/border/xoffset/yoffset are valid.
- // Otherwise, it would return quickly without doing other work.
- bool validateTexFunc(const char* functionName, TexFuncValidationFunctionType, TexFuncValidationSourceType, GLenum target, GLint level, GLenum internalformat, GLsizei width,
- GLsizei height, GLint border, GLenum format, GLenum type, GLint xoffset, GLint yoffset);
-
- // Helper function to check input width and height for functions {copy, compressed}Tex{Sub}Image.
- // Generates GL error and returns false if width or height is invalid.
- bool validateTexFuncDimensions(const char* functionName, TexFuncValidationFunctionType, GLenum target, GLint level, GLsizei width, GLsizei height);
-
- // Helper function to check input parameters for functions {copy}Tex{Sub}Image.
- // Generates GL error and returns false if parameters are invalid.
- bool validateTexFuncParameters(const char* functionName, TexFuncValidationFunctionType, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type);
-
- enum NullDisposition {
- NullAllowed,
- NullNotAllowed
- };
-
- // Helper function to validate that the given ArrayBufferView
- // is of the correct type and contains enough data for the texImage call.
- // Generates GL error and returns false if parameters are invalid.
- bool validateTexFuncData(const char* functionName, GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, ArrayBufferView* pixels, NullDisposition);
-
- // Helper function to validate a given texture format is settable as in
- // you can supply data to texImage2D, or call texImage2D, copyTexImage2D and
- // copyTexSubImage2D.
- // Generates GL error and returns false if the format is not settable.
- bool validateSettableTexFormat(const char* functionName, GLenum format);
-
- // Helper function to validate compressed texture data is correct size
- // for the given format and dimensions.
- bool validateCompressedTexFuncData(const char* functionName, GLsizei width, GLsizei height, GLenum format, ArrayBufferView* pixels);
-
- // Helper function for validating compressed texture formats.
- bool validateCompressedTexFormat(GLenum format);
-
- // Helper function to validate compressed texture dimensions are valid for
- // the given format.
- bool validateCompressedTexDimensions(const char* functionName, TexFuncValidationFunctionType, GLenum target, GLint level, GLsizei width, GLsizei height, GLenum format);
-
- // Helper function to validate compressed texture dimensions are valid for
- // the given format.
- bool validateCompressedTexSubDimensions(const char* functionName, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, WebGLTexture*);
-
- // Helper function to validate mode for draw{Arrays/Elements}.
- bool validateDrawMode(const char* functionName, GLenum);
-
- // Helper function to validate if front/back stencilMask and stencilFunc settings are the same.
- bool validateStencilSettings(const char* functionName);
-
- // Helper function to validate stencil or depth func.
- bool validateStencilOrDepthFunc(const char* functionName, GLenum);
-
- // Helper function for texParameterf and texParameteri.
- void texParameter(GLenum target, GLenum pname, GLfloat parami, GLint paramf, bool isFloat);
-
- // Helper function to print GL errors to console.
- void printGLErrorToConsole(const String&);
-
- // Helper function to print warnings to console. Currently
- // used only to warn about use of obsolete functions.
- void printWarningToConsole(const String&);
-
- // Helper function to validate input parameters for framebuffer functions.
- // Generate GL error if parameters are illegal.
- bool validateFramebufferFuncParameters(const char* functionName, GLenum target, GLenum attachment);
-
- // Helper function to validate blend equation mode.
- bool validateBlendEquation(const char* functionName, GLenum);
-
- // Helper function to validate blend func factors.
- bool validateBlendFuncFactors(const char* functionName, GLenum src, GLenum dst);
-
- // Helper function to validate a GL capability.
- bool validateCapability(const char* functionName, GLenum);
-
- // Helper function to validate input parameters for uniform functions.
- bool validateUniformParameters(const char* functionName, const WebGLUniformLocation*, Float32Array*, GLsizei mod);
- bool validateUniformParameters(const char* functionName, const WebGLUniformLocation*, Int32Array*, GLsizei mod);
- bool validateUniformParameters(const char* functionName, const WebGLUniformLocation*, void*, GLsizei, GLsizei mod);
- bool validateUniformMatrixParameters(const char* functionName, const WebGLUniformLocation*, GLboolean transpose, Float32Array*, GLsizei mod);
- bool validateUniformMatrixParameters(const char* functionName, const WebGLUniformLocation*, GLboolean transpose, void*, GLsizei, GLsizei mod);
-
- // Helper function to validate the target for bufferData.
- // Return the current bound buffer to target, or 0 if the target is invalid.
- WebGLBuffer* validateBufferDataTarget(const char* functionName, GLenum target);
-
- // Helper function for tex{Sub}Image2D to make sure image is ready and wouldn't taint Origin.
- bool validateHTMLImageElement(const char* functionName, HTMLImageElement*, ExceptionState&);
-
- // Helper function for tex{Sub}Image2D to make sure canvas is ready and wouldn't taint Origin.
- bool validateHTMLCanvasElement(const char* functionName, HTMLCanvasElement*, ExceptionState&);
-
- // Helper function to validate drawArrays(Instanced) calls
- bool validateDrawArrays(const char* functionName, GLenum mode, GLint first, GLsizei count);
-
- // Helper function to validate drawElements(Instanced) calls
- bool validateDrawElements(const char* functionName, GLenum mode, GLsizei count, GLenum type, long long offset);
-
- // Helper function to validate draw*Instanced calls
- bool validateDrawInstanced(const char* functionName, GLsizei primcount);
-
- // Helper functions for vertexAttribNf{v}.
- void vertexAttribfImpl(const char* functionName, GLuint index, GLsizei expectedSize, GLfloat, GLfloat, GLfloat, GLfloat);
- void vertexAttribfvImpl(const char* functionName, GLuint index, Float32Array*, GLsizei expectedSize);
- void vertexAttribfvImpl(const char* functionName, GLuint index, GLfloat*, GLsizei, GLsizei expectedSize);
-
- // Helper functions to bufferData() and bufferSubData().
- void bufferDataImpl(GLenum target, long long size, const void* data, GLenum usage);
- void bufferSubDataImpl(GLenum target, long long offset, GLsizeiptr size, const void* data);
-
- // Helper function for delete* (deleteBuffer, deleteProgram, etc) functions.
- // Return false if caller should return without further processing.
- bool deleteObject(WebGLObject*);
-
- // Helper function for bind* (bindBuffer, bindTexture, etc) and useProgram.
- // If the object has already been deleted, set deleted to true upon return.
- // Return false if caller should return without further processing.
- bool checkObjectToBeBound(const char* functionName, WebGLObject*, bool& deleted);
-
- void dispatchContextLostEvent(Timer<WebGLRenderingContextBase>*);
- // Helper for restoration after context lost.
- void maybeRestoreContext(Timer<WebGLRenderingContextBase>*);
-
- enum ConsoleDisplayPreference {
- DisplayInConsole,
- DontDisplayInConsole
- };
-
- // Wrapper for WebGraphicsContext3D::synthesizeGLError that sends a message
- // to the JavaScript console.
- void synthesizeGLError(GLenum, const char* functionName, const char* description, ConsoleDisplayPreference = DisplayInConsole);
- void emitGLWarning(const char* function, const char* reason);
-
- String ensureNotNull(const String&) const;
-
- // Enable or disable stencil test based on user setting and
- // whether the current FBO has a stencil buffer.
- void applyStencilTest();
-
- // Helper for enabling or disabling a capability.
- void enableOrDisable(GLenum capability, bool enable);
-
- // Clamp the width and height to GL_MAX_VIEWPORT_DIMS.
- IntSize clampedCanvasSize();
-
- // First time called, if EXT_draw_buffers is supported, query the value; otherwise return 0.
- // Later, return the cached value.
- GLint maxDrawBuffers();
- GLint maxColorAttachments();
-
- void setBackDrawBuffer(GLenum);
-
- void restoreCurrentFramebuffer();
- void restoreCurrentTexture2D();
-
- virtual void multisamplingChanged(bool) override;
-
- void findNewMaxNonDefaultTextureUnit();
-
- friend class WebGLStateRestorer;
- friend class WebGLRenderingContextEvictionManager;
-
- static Vector<WebGLRenderingContextBase*>& activeContexts();
- static Vector<WebGLRenderingContextBase*>& forciblyEvictedContexts();
-
- static void activateContext(WebGLRenderingContextBase*);
- static void deactivateContext(WebGLRenderingContextBase*);
- static void addToEvictedList(WebGLRenderingContextBase*);
- static void removeFromEvictedList(WebGLRenderingContextBase*);
- static void willDestroyContext(WebGLRenderingContextBase*);
- static void forciblyLoseOldestContext(const String& reason);
- // Return the least recently used context's position in the active context vector.
- // If the vector is empty, return the maximum allowed active context number.
- static size_t oldestContextIndex();
- static IntSize oldestContextSize();
-};
-
-DEFINE_TYPE_CASTS(WebGLRenderingContextBase, CanvasRenderingContext, context, context->is3d(), context.is3d());
-
-} // namespace blink
-
-WTF_ALLOW_MOVE_INIT_AND_COMPARE_WITH_MEM_FUNCTIONS(blink::WebGLRenderingContextBase::TextureUnitState);
-
-#endif // SKY_ENGINE_CORE_HTML_CANVAS_WEBGLRENDERINGCONTEXTBASE_H_
« no previous file with comments | « sky/engine/core/html/canvas/WebGLRenderingContext.idl ('k') | sky/engine/core/html/canvas/WebGLRenderingContextBase.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698