--- a/dom/canvas/WebGL2Context.h
+++ b/dom/canvas/WebGL2Context.h
@@ -152,73 +152,25 @@ public:
GLint zOffset, GLsizei width, GLsizei height,
GLsizei depth, GLenum sizedUnpackFormat,
const dom::ArrayBufferView& srcView,
GLuint srcElemOffset);
////////////////
// Texture PBOs
- void TexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat,
- GLsizei width, GLsizei height, GLint border, GLenum unpackFormat,
- GLenum unpackType, WebGLsizeiptr offset, ErrorResult&);
-
- void TexSubImage2D(GLenum texImageTarget, GLint level, GLint xOffset, GLint yOffset,
- GLsizei width, GLsizei height, GLenum unpackFormat,
- GLenum unpackType, WebGLsizeiptr offset, ErrorResult&);
-
void TexImage3D(GLenum target, GLint level, GLenum internalFormat, GLsizei width,
GLsizei height, GLsizei depth, GLint border, GLenum unpackFormat,
GLenum unpackType, WebGLsizeiptr offset);
void TexSubImage3D(GLenum target, GLint level, GLint xOffset, GLint yOffset,
GLint zOffset, GLsizei width, GLsizei height, GLsizei depth,
GLenum unpackFormat, GLenum unpackType, WebGLsizeiptr offset,
ErrorResult&);
- ////////////////
- // WebGL1 overloads
-
- void
- TexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat, GLsizei width,
- GLsizei height, GLint border, GLenum unpackFormat, GLenum unpackType,
- const dom::Nullable<dom::ArrayBufferView>& pixels, ErrorResult& out_rv)
- {
- WebGLContext::TexImage2D(texImageTarget, level, internalFormat, width, height,
- border, unpackFormat, unpackType, pixels, out_rv);
- }
-
- template<typename T>
- void
- TexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat,
- GLenum unpackFormat, GLenum unpackType, const T& any, ErrorResult& out_rv)
- {
- WebGLContext::TexImage2D(texImageTarget, level, internalFormat, unpackFormat,
- unpackType, any, out_rv);
- }
-
- void
- TexSubImage2D(GLenum texImageTarget, GLint level, GLint xOffset, GLint yOffset,
- GLsizei width, GLsizei height, GLenum unpackFormat, GLenum unpackType,
- const dom::ArrayBufferView& view, ErrorResult&)
- {
- WebGLContext::TexSubImage2D(texImageTarget, level, xOffset, yOffset, width,
- height, unpackFormat, unpackType, view);
- }
-
- template<typename T>
- inline void
- TexSubImage2D(GLenum texImageTarget, GLint level, GLint xOffset, GLint yOffset,
- GLenum unpackFormat, GLenum unpackType, const T& any,
- ErrorResult& out_rv)
- {
- WebGLContext::TexSubImage2D(texImageTarget, level, xOffset, yOffset, unpackFormat,
- unpackType, any, out_rv);
- }
-
// -------------------------------------------------------------------------
// Programs and shaders - WebGL2ContextPrograms.cpp
GLint GetFragDataLocation(WebGLProgram* program, const nsAString& name);
// -------------------------------------------------------------------------
// Uniforms and attributes - WebGL2ContextUniforms.cpp
void VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
--- a/dom/canvas/WebGL2ContextTextures.cpp
+++ b/dom/canvas/WebGL2ContextTextures.cpp
@@ -40,17 +40,17 @@ WebGL2Context::TexStorage3D(GLenum rawTe
tex->TexStorage(funcName, target, levels, internalFormat, width, height, depth);
}
void
WebGL2Context::TexImage3D(GLenum rawTexImageTarget, GLint level, GLenum internalFormat,
GLsizei width, GLsizei height, GLsizei depth, GLint border,
GLenum unpackFormat, GLenum unpackType,
- const dom::ArrayBufferView>* srcView, GLuint srcElemOffset)
+ const dom::ArrayBufferView* srcView, GLuint srcElemOffset)
{
const char funcName[] = "texImage3D";
const uint8_t funcDims = 3;
TexImageTarget target;
WebGLTexture* tex;
if (!ValidateTexImageTarget(this, funcName, funcDims, rawTexImageTarget, &target,
&tex))
@@ -59,17 +59,17 @@ WebGL2Context::TexImage3D(GLenum rawTexI
}
const bool isSubImage = false;
const GLint xOffset = 0;
const GLint yOffset = 0;
const GLint zOffset = 0;
tex->TexOrSubImage(isSubImage, funcName, target, level, internalFormat, xOffset,
yOffset, zOffset, width, height, depth, border, unpackFormat,
- unpackType, view, srcElemOffset);
+ unpackType, srcView, srcElemOffset);
}
void
WebGL2Context::TexSubImage3D(GLenum rawTexImageTarget, GLint level, GLint xOffset,
GLint yOffset, GLint zOffset, GLsizei width, GLsizei height,
GLsizei depth, GLenum unpackFormat, GLenum unpackType,
const dom::ArrayBufferView& srcView, GLuint srcElemOffset,
ErrorResult&)
@@ -153,17 +153,17 @@ WebGL2Context::CompressedTexImage3D(GLen
WebGLTexture* tex;
if (!ValidateTexImageTarget(this, funcName, funcDims, rawTexImageTarget, &target,
&tex))
{
return;
}
tex->CompressedTexImage(funcName, target, level, internalFormat, width, height, depth,
- border, view, srcElemOffset);
+ border, srcView, srcElemOffset);
}
void
WebGL2Context::CompressedTexSubImage3D(GLenum rawTexImageTarget, GLint level,
GLint xOffset, GLint yOffset, GLint zOffset,
GLsizei width, GLsizei height, GLsizei depth,
GLenum sizedUnpackFormat,
const dom::ArrayBufferView& srcView,
@@ -176,17 +176,17 @@ WebGL2Context::CompressedTexSubImage3D(G
WebGLTexture* tex;
if (!ValidateTexImageTarget(this, funcName, funcDims, rawTexImageTarget, &target,
&tex))
{
return;
}
tex->CompressedTexSubImage(funcName, target, level, xOffset, yOffset, zOffset, width,
- height, depth, sizedUnpackFormat, view, srcElemOffset);
+ height, depth, sizedUnpackFormat, srcView, srcElemOffset);
}
void
WebGL2Context::CopyTexSubImage3D(GLenum rawTexImageTarget, GLint level, GLint xOffset,
GLint yOffset, GLint zOffset, GLint x, GLint y,
GLsizei width, GLsizei height)
{
const char funcName[] = "copyTexSubImage3D";
@@ -202,20 +202,20 @@ WebGL2Context::CopyTexSubImage3D(GLenum
tex->CopyTexSubImage(funcName, target, level, xOffset, yOffset, zOffset, x, y, width,
height);
}
////////////////////
void
-WebGL2Context::TexImage2D(GLenum rawTexImageTarget, GLint level, GLenum internalFormat,
- GLsizei width, GLsizei height, GLint border,
- GLenum unpackFormat, GLenum unpackType, WebGLsizeiptr offset,
- ErrorResult&)
+WebGLContext::TexImage2D(GLenum rawTexImageTarget, GLint level, GLenum internalFormat,
+ GLsizei width, GLsizei height, GLint border,
+ GLenum unpackFormat, GLenum unpackType, WebGLsizeiptr offset,
+ ErrorResult&)
{
const char funcName[] = "texImage2D";
const uint8_t funcDims = 2;
TexImageTarget target;
WebGLTexture* tex;
if (!ValidateTexImageTarget(this, funcName, funcDims, rawTexImageTarget, &target,
&tex))
@@ -229,20 +229,20 @@ WebGL2Context::TexImage2D(GLenum rawTexI
const GLint zOffset = 0;
const GLsizei depth = 1;
tex->TexOrSubImage(isSubImage, funcName, target, level, internalFormat, xOffset,
yOffset, zOffset, width, height, depth, border, unpackFormat,
unpackType, offset);
}
void
-WebGL2Context::TexSubImage2D(GLenum rawTexImageTarget, GLint level, GLint xOffset,
- GLint yOffset, GLsizei width, GLsizei height,
- GLenum unpackFormat, GLenum unpackType, WebGLsizeiptr offset,
- ErrorResult&)
+WebGLContext::TexSubImage2D(GLenum rawTexImageTarget, GLint level, GLint xOffset,
+ GLint yOffset, GLsizei width, GLsizei height,
+ GLenum unpackFormat, GLenum unpackType, WebGLsizeiptr offset,
+ ErrorResult&)
{
const char funcName[] = "texSubImage2D";
const uint8_t funcDims = 2;
TexImageTarget target;
WebGLTexture* tex;
if (!ValidateTexImageTarget(this, funcName, funcDims, rawTexImageTarget, &target,
&tex))
--- a/dom/canvas/WebGLContext.h
+++ b/dom/canvas/WebGLContext.h
@@ -865,71 +865,84 @@ protected:
GLfloat* maybeFloatParam);
virtual bool IsTexParamValid(GLenum pname) const;
// Upload funcs
public:
void CompressedTexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat,
GLsizei width, GLsizei height, GLint border,
- const dom::ArrayBufferView& view);
+ const dom::ArrayBufferView& view, GLuint srcElemOffset = 0);
void CompressedTexSubImage2D(GLenum texImageTarget, GLint level, GLint xOffset,
GLint yOffset, GLsizei width, GLsizei height,
- GLenum unpackFormat, const dom::ArrayBufferView& view);
+ GLenum unpackFormat, const dom::ArrayBufferView& view,
+ GLuint srcElemOffset = 0);
void CopyTexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat,
GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
void CopyTexSubImage2D(GLenum texImageTarget, GLint level, GLint xOffset,
GLint yOffset, GLint x, GLint y, GLsizei width,
GLsizei height);
////
void TexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat,
GLsizei width, GLsizei height, GLint border, GLenum unpackFormat,
GLenum unpackType,
const dom::Nullable<dom::ArrayBufferView>& maybeView,
- ErrorResult& out_error)
+ ErrorResult&)
{
- if (IsContextLost())
- return;
+ const dom::ArrayBufferView* view = nullptr;
+ if (!maybeView.IsNull()) {
+ view = &(maybeView.Value());
+ }
TexImage2D(texImageTarget, level, internalFormat, width, height, border,
- unpackFormat, unpackType, maybeView, 0, out_error);
+ unpackFormat, unpackType, view, 0);
}
void TexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat,
GLsizei width, GLsizei height, GLint border, GLenum unpackFormat,
- GLenum unpackType,
- const dom::Nullable<dom::ArrayBufferView>& maybeSrc,
- GLuint srcElemOffset, ErrorResult&);
+ GLenum unpackType, const dom::ArrayBufferView& srcView,
+ GLuint srcElemOffset, ErrorResult&)
+ {
+ TexImage2D(texImageTarget, level, internalFormat, width, height, border,
+ unpackFormat, unpackType, &srcView, srcElemOffset);
+ }
protected:
void TexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat,
+ GLsizei width, GLsizei height, GLint border, GLenum unpackFormat,
+ GLenum unpackType, const dom::ArrayBufferView* srcView,
+ GLuint srcElemOffset);
+
+public:
+ void TexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat,
GLenum unpackFormat, GLenum unpackType,
const dom::ImageData& imageData, ErrorResult& out_error);
-public:
void TexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat,
GLenum unpackFormat, GLenum unpackType, const dom::Element& elem,
ErrorResult& out_error);
+ void TexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat,
+ GLsizei width, GLsizei height, GLint border, GLenum unpackFormat,
+ GLenum unpackType, WebGLsizeiptr offset, ErrorResult&);
////
-protected:
- void TexSubImage2D(GLenum texImageTarget, GLint level, GLint xOffset, GLint yOffset,
- GLsizei width, GLsizei height, GLenum unpackFormat,
- GLenum unpackType, const dom::ArrayBufferView& view);
void TexSubImage2D(GLenum texImageTarget, GLint level, GLint xOffset, GLint yOffset,
GLenum unpackFormat, GLenum unpackType,
const dom::ImageData& imageData, ErrorResult& out_error);
-public:
void TexSubImage2D(GLenum texImageTarget, GLint level, GLint xOffset, GLint yOffset,
GLenum unpackFormat, GLenum unpackType, const dom::Element& elem,
ErrorResult& out_error);
+ void TexSubImage2D(GLenum texImageTarget, GLint level, GLint xOffset, GLint yOffset,
+ GLsizei width, GLsizei height, GLenum unpackFormat,
+ GLenum unpackType, WebGLsizeiptr offset, ErrorResult&);
+
////////////////
// dom::ImageData
void TexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat,
GLenum unpackFormat, GLenum unpackType,
const dom::ImageData* imageData, ErrorResult& out_error)
{
const char funcName[] = "texImage2D";
@@ -968,17 +981,17 @@ public:
const char funcName[] = "texSubImage2D";
if (IsContextLost())
return;
if (maybeSrc.IsNull())
return ErrorInvalidValue("%s: `data` must not be null.", funcName);
TexSubImage2D(texImageTarget, level, xOffset, yOffset, width, height,
- unpackFormat, unpackType, maybeView.Value(), 0, out_error);
+ unpackFormat, unpackType, maybeSrc.Value(), 0, out_error);
}
void TexSubImage2D(GLenum texImageTarget, GLint level, GLint xOffset, GLint yOffset,
GLsizei width, GLsizei height, GLenum unpackFormat,
GLenum unpackType,
const dom::ArrayBufferView& srcView, GLuint srcElemOffset,
ErrorResult&);
--- a/dom/canvas/WebGLContextTextures.cpp
+++ b/dom/canvas/WebGLContextTextures.cpp
@@ -322,44 +322,38 @@ WebGLContext::TexParameter_base(GLenum r
////////////////////
// TexImage
void
WebGLContext::TexImage2D(GLenum rawTexImageTarget, GLint level, GLenum internalFormat,
GLsizei width, GLsizei height, GLint border, GLenum unpackFormat,
- GLenum unpackType,
- const dom::Nullable<dom::ArrayBufferView>& maybeView,
- ErrorResult&)
+ GLenum unpackType, const dom::ArrayBufferView* maybeView,
+ GLuint elemOffset)
{
const char funcName[] = "texImage2D";
const uint8_t funcDims = 2;
TexImageTarget target;
WebGLTexture* tex;
if (!ValidateTexImageTarget(this, funcName, funcDims, rawTexImageTarget, &target,
&tex))
{
return;
}
- const dom::ArrayBufferView* view = nullptr;
- if (!maybeView.IsNull()) {
- view = &maybeView.Value();
- }
-
const bool isSubImage = false;
const GLint xOffset = 0;
const GLint yOffset = 0;
const GLint zOffset = 0;
const GLsizei depth = 1;
tex->TexOrSubImage(isSubImage, funcName, target, level, internalFormat, xOffset,
yOffset, zOffset, width, height, depth, border, unpackFormat,
- unpackType, view);
+ unpackType, maybeView, elemOffset);
}
void
WebGLContext::TexImage2D(GLenum rawTexImageTarget, GLint level, GLenum internalFormat,
GLenum unpackFormat, GLenum unpackType,
const dom::ImageData& imageData, ErrorResult&)
{
const char funcName[] = "texImage2D";
@@ -407,17 +401,18 @@ WebGLContext::TexImage2D(GLenum rawTexIm
////////////////////////////////////////
// TexSubImage
void
WebGLContext::TexSubImage2D(GLenum rawTexImageTarget, GLint level, GLint xOffset,
GLint yOffset, GLsizei width, GLsizei height,
GLenum unpackFormat, GLenum unpackType,
- const dom::ArrayBufferView& view)
+ const dom::ArrayBufferView& view, GLuint elemOffset,
+ ErrorResult&)
{
const char funcName[] = "texSubImage2D";
const uint8_t funcDims = 2;
TexImageTarget target;
WebGLTexture* tex;
if (!ValidateTexImageTarget(this, funcName, funcDims, rawTexImageTarget, &target,
&tex))
@@ -427,17 +422,17 @@ WebGLContext::TexSubImage2D(GLenum rawTe
const bool isSubImage = true;
const GLenum internalFormat = 0;
const GLint zOffset = 0;
const GLsizei depth = 1;
const GLint border = 0;
tex->TexOrSubImage(isSubImage, funcName, target, level, internalFormat, xOffset,
yOffset, zOffset, width, height, depth, border, unpackFormat,
- unpackType, &view);
+ unpackType, &view, elemOffset);
}
void
WebGLContext::TexSubImage2D(GLenum rawTexImageTarget, GLint level, GLint xOffset,
GLint yOffset, GLenum unpackFormat, GLenum unpackType,
const dom::ImageData& imageData, ErrorResult&)
{
const char funcName[] = "texSubImage2D";
@@ -482,58 +477,57 @@ WebGLContext::TexSubImage2D(GLenum rawTe
}
////////////////////////////////////////
// CompressedTex(Sub)Image
void
WebGLContext::CompressedTexImage2D(GLenum rawTexImageTarget, GLint level,
GLenum internalFormat, GLsizei width, GLsizei height,
- GLint border,
- const dom::ArrayBufferView& view)
+ GLint border, const dom::ArrayBufferView& srcView,
+ GLuint srcElemOffset)
{
const char funcName[] = "compressedTexImage2D";
const uint8_t funcDims = 2;
TexImageTarget target;
WebGLTexture* tex;
if (!ValidateTexImageTarget(this, funcName, funcDims, rawTexImageTarget, &target,
&tex))
{
return;
}
const GLsizei depth = 1;
-
tex->CompressedTexImage(funcName, target, level, internalFormat, width, height, depth,
- border, view);
+ border, srcView, srcElemOffset);
}
void
WebGLContext::CompressedTexSubImage2D(GLenum rawTexImageTarget, GLint level,
GLint xOffset, GLint yOffset, GLsizei width,
GLsizei height, GLenum sizedUnpackFormat,
- const dom::ArrayBufferView& view)
+ const dom::ArrayBufferView& srcView,
+ GLuint srcElemOffset)
{
const char funcName[] = "compressedTexSubImage2D";
const uint8_t funcDims = 2;
TexImageTarget target;
WebGLTexture* tex;
if (!ValidateTexImageTarget(this, funcName, funcDims, rawTexImageTarget, &target,
&tex))
{
return;
}
const GLint zOffset = 0;
const GLsizei depth = 1;
-
tex->CompressedTexSubImage(funcName, target, level, xOffset, yOffset, zOffset, width,
- height, depth, sizedUnpackFormat, view);
+ height, depth, sizedUnpackFormat, srcView, srcElemOffset);
}
////////////////////////////////////////
// CopyTex(Sub)Image
void
WebGLContext::CopyTexImage2D(GLenum rawTexImageTarget, GLint level, GLenum internalFormat,
GLint x, GLint y, GLsizei width, GLsizei height,
--- a/dom/canvas/WebGLTextureUpload.cpp
+++ b/dom/canvas/WebGLTextureUpload.cpp
@@ -263,17 +263,17 @@ WebGLTexture::TexOrSubImage(bool isSubIm
const auto& jsType = srcView->Type();
if (!DoesJSTypeMatchUnpackType(pi.type, jsType)) {
mContext->ErrorInvalidOperation("%s: `pixels` not compatible with `type`.",
funcName);
return;
}
if (!mContext->ValidateArrayBufferView(funcName, *srcView, srcElemOffset, 0,
- &bytes, &byteCount))
+ const_cast<uint8_t**>(&bytes), &byteCount))
{
return;
}
} else if (isSubImage) {
mContext->ErrorInvalidValue("%s: `pixels` must not be null.", funcName);
return;
}
@@ -1489,20 +1489,20 @@ WebGLTexture::CompressedTexImage(const c
}
if (!ValidateTargetForFormat(funcName, mContext, target, format))
return;
////////////////////////////////////
// Get source info
- uint8_t* bytes;
+ const uint8_t* bytes;
size_t byteLen;
- if (!mContext->ValidateArrayBufferView(funcName, srcView, srcElemOffset, 0, &bytes,
- &byteLen))
+ if (!mContext->ValidateArrayBufferView(funcName, srcView, srcElemOffset, 0,
+ const_cast<uint8_t**>(&bytes), &byteLen))
{
return;
}
if (!ValidateCompressedTexUnpack(mContext, funcName, width, height, depth, format,
byteLen))
{
return;
@@ -1593,20 +1593,20 @@ WebGLTexture::CompressedTexSubImage(cons
MOZ_ASSERT(imageInfo);
auto dstUsage = imageInfo->mFormat;
auto dstFormat = dstUsage->format;
////////////////////////////////////
// Get source info
- uint8_t* bytes;
+ const uint8_t* bytes;
size_t byteLen;
- if (!mContext->ValidateArrayBufferView(funcName, srcView, srcElemOffset, 0, &bytes,
- &byteLen))
+ if (!mContext->ValidateArrayBufferView(funcName, srcView, srcElemOffset, 0,
+ const_cast<uint8_t**>(&bytes), &byteLen))
{
return;
}
auto srcUsage = mContext->mFormatUsage->GetSizedTexUsage(sizedUnpackFormat);
if (!srcUsage->format->compression) {
mContext->ErrorInvalidEnum("%s: Specified format must be compressed.", funcName);
return;