diff --git a/dom/canvas/WebGL1Context.h b/dom/canvas/WebGL1Context.h index f9f8cb4c0f6b..084e086d4d29 100644 --- a/dom/canvas/WebGL1Context.h +++ b/dom/canvas/WebGL1Context.h @@ -34,7 +34,8 @@ private: virtual bool ValidateBufferTarget(GLenum target, const char* info) override; virtual bool ValidateBufferIndexedTarget(GLenum target, const char* info) override; virtual bool ValidateBufferForTarget(GLenum target, WebGLBuffer* buffer, const char* info) override; - + virtual bool ValidateBufferUsageEnum(GLenum usage, const char* info) override; + virtual bool ValidateUniformMatrixTranspose(bool transpose, const char* info) override; }; diff --git a/dom/canvas/WebGL1ContextBuffers.cpp b/dom/canvas/WebGL1ContextBuffers.cpp index 5f54ec6fd9f8..77fe5ff8ff06 100644 --- a/dom/canvas/WebGL1ContextBuffers.cpp +++ b/dom/canvas/WebGL1ContextBuffers.cpp @@ -50,3 +50,19 @@ WebGL1Context::ValidateBufferForTarget(GLenum target, WebGLBuffer* buffer, return true; } + +bool +WebGL1Context::ValidateBufferUsageEnum(GLenum usage, const char* info) +{ + switch (usage) { + case LOCAL_GL_STREAM_DRAW: + case LOCAL_GL_STATIC_DRAW: + case LOCAL_GL_DYNAMIC_DRAW: + return true; + default: + break; + } + + ErrorInvalidEnumInfo(info, usage); + return false; +} diff --git a/dom/canvas/WebGL2Context.h b/dom/canvas/WebGL2Context.h index 020a172d6223..cb2c09eb5c9a 100644 --- a/dom/canvas/WebGL2Context.h +++ b/dom/canvas/WebGL2Context.h @@ -348,6 +348,7 @@ private: virtual bool ValidateBufferTarget(GLenum target, const char* info) override; virtual bool ValidateBufferIndexedTarget(GLenum target, const char* info) override; virtual bool ValidateBufferForTarget(GLenum target, WebGLBuffer* buffer, const char* info) override; + virtual bool ValidateBufferUsageEnum(GLenum usage, const char* info) override; virtual bool ValidateUniformMatrixTranspose(bool transpose, const char* info) override; }; diff --git a/dom/canvas/WebGL2ContextBuffers.cpp b/dom/canvas/WebGL2ContextBuffers.cpp index 952ab5ac36d4..067bde984a84 100644 --- a/dom/canvas/WebGL2ContextBuffers.cpp +++ b/dom/canvas/WebGL2ContextBuffers.cpp @@ -75,6 +75,28 @@ WebGL2Context::ValidateBufferForTarget(GLenum target, WebGLBuffer* buffer, return false; } +bool +WebGL2Context::ValidateBufferUsageEnum(GLenum usage, const char* info) +{ + switch (usage) { + case LOCAL_GL_DYNAMIC_COPY: + case LOCAL_GL_DYNAMIC_DRAW: + case LOCAL_GL_DYNAMIC_READ: + case LOCAL_GL_STATIC_COPY: + case LOCAL_GL_STATIC_DRAW: + case LOCAL_GL_STATIC_READ: + case LOCAL_GL_STREAM_COPY: + case LOCAL_GL_STREAM_DRAW: + case LOCAL_GL_STREAM_READ: + return true; + default: + break; + } + + ErrorInvalidEnumInfo(info, usage); + return false; +} + // ------------------------------------------------------------------------- // Buffer objects diff --git a/dom/canvas/WebGLContext.h b/dom/canvas/WebGLContext.h index e336a8077aef..ceeeb10724c6 100644 --- a/dom/canvas/WebGLContext.h +++ b/dom/canvas/WebGLContext.h @@ -932,7 +932,6 @@ protected: WebGLRefPtr& GetBufferSlotByTarget(GLenum target); WebGLRefPtr& GetBufferSlotByTargetIndexed(GLenum target, GLuint index); - bool ValidateBufferUsageEnum(GLenum target, const char* info); // ----------------------------------------------------------------------------- // Queries (WebGL2ContextQueries.cpp) @@ -1389,6 +1388,7 @@ private: virtual bool ValidateBufferTarget(GLenum target, const char* info) = 0; virtual bool ValidateBufferIndexedTarget(GLenum target, const char* info) = 0; virtual bool ValidateBufferForTarget(GLenum target, WebGLBuffer* buffer, const char* info) = 0; + virtual bool ValidateBufferUsageEnum(GLenum usage, const char* info) = 0; virtual bool ValidateUniformMatrixTranspose(bool transpose, const char* info) = 0; protected: