mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-11 20:35:50 +00:00
Bug 1293845 - Repair texture bindings->internals glue. - r=mtseng
MozReview-Commit-ID: CUDQGwhPTuU
This commit is contained in:
parent
959a28cd66
commit
34aa7ab5f7
@ -52,15 +52,12 @@ private:
|
||||
|
||||
public:
|
||||
void GetBufferSubData(GLenum target, GLintptr offset,
|
||||
const dom::Nullable<dom::ArrayBuffer>& maybeData);
|
||||
void GetBufferSubData(GLenum target, GLintptr offset,
|
||||
const dom::SharedArrayBuffer& data);
|
||||
const dom::ArrayBufferView& dstData);
|
||||
void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format,
|
||||
GLenum type, WebGLsizeiptr offset, ErrorResult& out_error);
|
||||
|
||||
void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height,
|
||||
GLenum format, GLenum type,
|
||||
const dom::Nullable<dom::ArrayBufferView>& pixels,
|
||||
void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format,
|
||||
GLenum type, const dom::ArrayBufferView& pixels,
|
||||
ErrorResult& out_error)
|
||||
{
|
||||
WebGLContext::ReadPixels(x, y, width, height, format, type, pixels, out_error);
|
||||
@ -102,39 +99,28 @@ public:
|
||||
GLsizei height);
|
||||
void TexStorage3D(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width,
|
||||
GLsizei height, GLsizei depth);
|
||||
|
||||
void TexImage3D(GLenum target, GLint level, GLenum internalFormat, GLsizei width,
|
||||
GLsizei height, GLsizei depth, GLint border, GLenum unpackFormat,
|
||||
GLenum unpackType,
|
||||
const dom::Nullable<dom::ArrayBufferView>& pixels);
|
||||
GLenum unpackType, const dom::Nullable<dom::ArrayBufferView>& data);
|
||||
|
||||
void TexSubImage3D(GLenum target, GLint level, GLint xOffset, GLint yOffset,
|
||||
GLint zOffset, GLsizei width, GLsizei height, GLsizei depth,
|
||||
GLenum unpackFormat, GLenum unpackType,
|
||||
const dom::Nullable<dom::ArrayBufferView>& pixels,
|
||||
ErrorResult& out_rv);
|
||||
const dom::ArrayBufferView& data, ErrorResult&);
|
||||
void TexSubImage3D(GLenum target, GLint level, GLint xOffset, GLint yOffset,
|
||||
GLint zOffset, GLenum unpackFormat, GLenum unpackType,
|
||||
dom::ImageData* data, ErrorResult& out_rv);
|
||||
protected:
|
||||
const dom::ImageData& data, ErrorResult&);
|
||||
void TexSubImage3D(GLenum target, GLint level, GLint xOffset, GLint yOffset,
|
||||
GLint zOffset, GLenum unpackFormat, GLenum unpackType,
|
||||
dom::Element* elem, ErrorResult* const out_rv);
|
||||
public:
|
||||
template<class T>
|
||||
inline void
|
||||
TexSubImage3D(GLenum target, GLint level, GLint xOffset, GLint yOffset, GLint zOffset,
|
||||
GLenum unpackFormat, GLenum unpackType, T& any, ErrorResult& out_rv)
|
||||
{
|
||||
TexSubImage3D(target, level, xOffset, yOffset, zOffset, unpackFormat, unpackType,
|
||||
&any, &out_rv);
|
||||
}
|
||||
const dom::Element& elem, ErrorResult& out_error);
|
||||
|
||||
void CopyTexSubImage3D(GLenum target, GLint level, GLint xOffset, GLint yOffset,
|
||||
GLint zOffset, GLint x, GLint y, GLsizei width,
|
||||
GLsizei height);
|
||||
void CompressedTexImage3D(GLenum target, GLint level, GLenum internalFormat,
|
||||
GLsizei width, GLsizei height, GLsizei depth,
|
||||
GLint border,
|
||||
const dom::ArrayBufferView& data);
|
||||
GLint border, const dom::ArrayBufferView& data);
|
||||
void CompressedTexSubImage3D(GLenum target, GLint level, GLint xOffset, GLint yOffset,
|
||||
GLint zOffset, GLsizei width, GLsizei height,
|
||||
GLsizei depth, GLenum sizedUnpackFormat,
|
||||
@ -175,7 +161,7 @@ public:
|
||||
template<typename T>
|
||||
void
|
||||
TexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat,
|
||||
GLenum unpackFormat, GLenum unpackType, T& any, ErrorResult& out_rv)
|
||||
GLenum unpackFormat, GLenum unpackType, const T& any, ErrorResult& out_rv)
|
||||
{
|
||||
WebGLContext::TexImage2D(texImageTarget, level, internalFormat, unpackFormat,
|
||||
unpackType, any, out_rv);
|
||||
@ -184,16 +170,17 @@ public:
|
||||
void
|
||||
TexSubImage2D(GLenum texImageTarget, GLint level, GLint xOffset, GLint yOffset,
|
||||
GLsizei width, GLsizei height, GLenum unpackFormat, GLenum unpackType,
|
||||
const dom::Nullable<dom::ArrayBufferView>& pixels, ErrorResult& out_rv)
|
||||
const dom::ArrayBufferView& view, ErrorResult&)
|
||||
{
|
||||
WebGLContext::TexSubImage2D(texImageTarget, level, xOffset, yOffset, width,
|
||||
height, unpackFormat, unpackType, pixels, out_rv);
|
||||
height, unpackFormat, unpackType, view);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline void
|
||||
TexSubImage2D(GLenum texImageTarget, GLint level, GLint xOffset, GLint yOffset,
|
||||
GLenum unpackFormat, GLenum unpackType, T& any, ErrorResult& out_rv)
|
||||
GLenum unpackFormat, GLenum unpackType, const T& any,
|
||||
ErrorResult& out_rv)
|
||||
{
|
||||
WebGLContext::TexSubImage2D(texImageTarget, level, xOffset, yOffset, unpackFormat,
|
||||
unpackType, any, out_rv);
|
||||
|
@ -140,12 +140,9 @@ WebGL2Context::CopyBufferSubData(GLenum readTarget, GLenum writeTarget,
|
||||
}
|
||||
}
|
||||
|
||||
// BufferT may be one of
|
||||
// const dom::ArrayBuffer&
|
||||
// const dom::SharedArrayBuffer&
|
||||
template<typename BufferT>
|
||||
void
|
||||
WebGL2Context::GetBufferSubDataT(GLenum target, GLintptr offset, const BufferT& data)
|
||||
WebGL2Context::GetBufferSubData(GLenum target, GLintptr offset,
|
||||
const dom::ArrayBufferView& data)
|
||||
{
|
||||
const char funcName[] = "getBufferSubData";
|
||||
if (IsContextLost())
|
||||
@ -235,26 +232,4 @@ WebGL2Context::GetBufferSubDataT(GLenum target, GLintptr offset, const BufferT&
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
WebGL2Context::GetBufferSubData(GLenum target, GLintptr offset,
|
||||
const dom::Nullable<dom::ArrayBuffer>& maybeData)
|
||||
{
|
||||
// If returnedData is null then an INVALID_VALUE error is
|
||||
// generated.
|
||||
if (maybeData.IsNull()) {
|
||||
ErrorInvalidValue("getBufferSubData: returnedData is null");
|
||||
return;
|
||||
}
|
||||
|
||||
const dom::ArrayBuffer& data = maybeData.Value();
|
||||
GetBufferSubDataT(target, offset, data);
|
||||
}
|
||||
|
||||
void
|
||||
WebGL2Context::GetBufferSubData(GLenum target, GLintptr offset,
|
||||
const dom::SharedArrayBuffer& data)
|
||||
{
|
||||
GetBufferSubDataT(target, offset, data);
|
||||
}
|
||||
|
||||
} // namespace mozilla
|
||||
|
@ -58,21 +58,25 @@ WebGL2Context::TexImage3D(GLenum rawTexImageTarget, GLint level, GLenum internal
|
||||
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;
|
||||
tex->TexOrSubImage(isSubImage, funcName, target, level, internalFormat, xOffset,
|
||||
yOffset, zOffset, width, height, depth, border, unpackFormat,
|
||||
unpackType, maybeView);
|
||||
unpackType, view);
|
||||
}
|
||||
|
||||
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::Nullable<dom::ArrayBufferView>& maybeView,
|
||||
ErrorResult& /*out_rv*/)
|
||||
const dom::ArrayBufferView& view, ErrorResult&)
|
||||
{
|
||||
const char funcName[] = "texSubImage3D";
|
||||
const uint8_t funcDims = 3;
|
||||
@ -90,14 +94,14 @@ WebGL2Context::TexSubImage3D(GLenum rawTexImageTarget, GLint level, GLint xOffse
|
||||
const GLint border = 0;
|
||||
tex->TexOrSubImage(isSubImage, funcName, target, level, internalFormat, xOffset,
|
||||
yOffset, zOffset, width, height, depth, border, unpackFormat,
|
||||
unpackType, maybeView);
|
||||
unpackType, &view);
|
||||
}
|
||||
|
||||
void
|
||||
WebGL2Context::TexSubImage3D(GLenum rawTexImageTarget, GLint level, GLint xOffset,
|
||||
GLint yOffset, GLint zOffset, GLenum unpackFormat,
|
||||
GLenum unpackType, dom::ImageData* imageData,
|
||||
ErrorResult& /*out_rv*/)
|
||||
GLenum unpackType, const dom::ImageData& imageData,
|
||||
ErrorResult&)
|
||||
{
|
||||
const char funcName[] = "texSubImage3D";
|
||||
const uint8_t funcDims = 3;
|
||||
@ -119,8 +123,8 @@ WebGL2Context::TexSubImage3D(GLenum rawTexImageTarget, GLint level, GLint xOffse
|
||||
void
|
||||
WebGL2Context::TexSubImage3D(GLenum rawTexImageTarget, GLint level, GLint xOffset,
|
||||
GLint yOffset, GLint zOffset, GLenum unpackFormat,
|
||||
GLenum unpackType, dom::Element* elem,
|
||||
ErrorResult* const out_rv)
|
||||
GLenum unpackType, const dom::Element& elem,
|
||||
ErrorResult& out_rv)
|
||||
{
|
||||
const char funcName[] = "texSubImage3D";
|
||||
const uint8_t funcDims = 3;
|
||||
@ -136,7 +140,7 @@ WebGL2Context::TexSubImage3D(GLenum rawTexImageTarget, GLint level, GLint xOffse
|
||||
const bool isSubImage = true;
|
||||
const GLenum internalFormat = 0;
|
||||
tex->TexOrSubImage(isSubImage, funcName, target, level, internalFormat, xOffset,
|
||||
yOffset, zOffset, unpackFormat, unpackType, elem, out_rv);
|
||||
yOffset, zOffset, unpackFormat, unpackType, elem, &out_rv);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -552,10 +552,20 @@ protected:
|
||||
GLenum destType, void* dest, uint32_t dataLen,
|
||||
uint32_t rowStride);
|
||||
public:
|
||||
void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height,
|
||||
GLenum format, GLenum type,
|
||||
const dom::Nullable<dom::ArrayBufferView>& pixels,
|
||||
ErrorResult& rv);
|
||||
void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format,
|
||||
GLenum type, const dom::Nullable<dom::ArrayBufferView>& maybeView,
|
||||
ErrorResult& rv)
|
||||
{
|
||||
const char funcName[] = "readPixels";
|
||||
if (maybeView.IsNull()) {
|
||||
ErrorInvalidValue("%s: `pixels` must not be null.", funcName);
|
||||
return;
|
||||
}
|
||||
ReadPixels(x, y, width, height, format, type, maybeView.Value(), rv);
|
||||
}
|
||||
|
||||
void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format,
|
||||
GLenum type, const dom::ArrayBufferView& pixels, ErrorResult& rv);
|
||||
void RenderbufferStorage(GLenum target, GLenum internalFormat,
|
||||
GLsizei width, GLsizei height);
|
||||
protected:
|
||||
@ -852,48 +862,77 @@ public:
|
||||
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&);
|
||||
protected:
|
||||
void TexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat,
|
||||
GLenum unpackFormat, GLenum unpackType, dom::ImageData* imageData,
|
||||
ErrorResult&);
|
||||
GLenum unpackFormat, GLenum unpackType,
|
||||
const dom::ImageData& imageData, ErrorResult& out_error);
|
||||
public:
|
||||
void TexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat,
|
||||
GLenum unpackFormat, GLenum unpackType, dom::Element* elem,
|
||||
ErrorResult* const out_error);
|
||||
GLenum unpackFormat, GLenum unpackType, const dom::Element& elem,
|
||||
ErrorResult& out_error);
|
||||
|
||||
////
|
||||
|
||||
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);
|
||||
|
||||
////////////////
|
||||
// Pseudo-nullable WebGL1 entrypoints
|
||||
|
||||
void TexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat,
|
||||
GLenum unpackFormat, GLenum unpackType,
|
||||
const dom::ImageData* imageData, ErrorResult& out_error)
|
||||
{
|
||||
const char funcName[] = "texImage2D";
|
||||
if (!imageData) {
|
||||
ErrorInvalidValue("%s: `data` must not be null.", funcName);
|
||||
return;
|
||||
}
|
||||
TexImage2D(texImageTarget, level, internalFormat, unpackFormat, unpackType,
|
||||
*imageData, out_error);
|
||||
}
|
||||
|
||||
void TexSubImage2D(GLenum texImageTarget, GLint level, GLint xOffset, GLint yOffset,
|
||||
GLsizei width, GLsizei height, GLenum unpackFormat,
|
||||
GLenum unpackType,
|
||||
const dom::Nullable<dom::ArrayBufferView>& maybeView,
|
||||
ErrorResult&);
|
||||
void TexSubImage2D(GLenum texImageTarget, GLint level, GLint xOffset, GLint yOffset,
|
||||
GLenum unpackFormat, GLenum unpackType, dom::ImageData* imageData,
|
||||
ErrorResult&);
|
||||
void TexSubImage2D(GLenum texImageTarget, GLint level, GLint xOffset, GLint yOffset,
|
||||
GLenum unpackFormat, GLenum unpackType, dom::Element* elem,
|
||||
ErrorResult* const out_error);
|
||||
|
||||
// Allow whatever element unpackTypes the bindings are willing to pass
|
||||
// us in Tex(Sub)Image2D
|
||||
template<typename T>
|
||||
inline void
|
||||
TexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat,
|
||||
GLenum unpackFormat, GLenum unpackType, T& elem, ErrorResult& out_error)
|
||||
const dom::Nullable<dom::ArrayBufferView>& maybeView, ErrorResult&)
|
||||
{
|
||||
TexImage2D(texImageTarget, level, internalFormat, unpackFormat, unpackType, &elem,
|
||||
&out_error);
|
||||
const char funcName[] = "texSubImage2D";
|
||||
if (maybeView.IsNull()) {
|
||||
ErrorInvalidValue("%s: `data` must not be null.", funcName);
|
||||
return;
|
||||
}
|
||||
TexSubImage2D(texImageTarget, level, xOffset, yOffset, width, height,
|
||||
unpackFormat, unpackType, maybeView.Value());
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline void
|
||||
TexSubImage2D(GLenum texImageTarget, GLint level, GLint xOffset, GLint yOffset,
|
||||
GLenum unpackFormat, GLenum unpackType, T& elem, ErrorResult& out_error)
|
||||
void TexSubImage2D(GLenum texImageTarget, GLint level, GLint xOffset, GLint yOffset,
|
||||
GLenum unpackFormat, GLenum unpackType,
|
||||
const dom::ImageData* imageData, ErrorResult& out_error)
|
||||
{
|
||||
const char funcName[] = "texSubImage2D";
|
||||
if (!imageData) {
|
||||
ErrorInvalidValue("%s: `data` must not be null.", funcName);
|
||||
return;
|
||||
}
|
||||
TexSubImage2D(texImageTarget, level, xOffset, yOffset, unpackFormat, unpackType,
|
||||
&elem, &out_error);
|
||||
*imageData, out_error);
|
||||
}
|
||||
|
||||
//////
|
||||
|
@ -1503,8 +1503,7 @@ WebGLContext::ValidatePackSize(const char* funcName, uint32_t width, uint32_t he
|
||||
|
||||
void
|
||||
WebGLContext::ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format,
|
||||
GLenum type,
|
||||
const dom::Nullable<dom::ArrayBufferView>& pixels,
|
||||
GLenum type, const dom::ArrayBufferView& view,
|
||||
ErrorResult& out_error)
|
||||
{
|
||||
if (!ReadPixels_SharedPrecheck(&out_error))
|
||||
@ -1517,15 +1516,6 @@ WebGLContext::ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum
|
||||
|
||||
//////
|
||||
|
||||
if (pixels.IsNull()) {
|
||||
ErrorInvalidValue("readPixels: null destination buffer");
|
||||
return;
|
||||
}
|
||||
|
||||
const auto& view = pixels.Value();
|
||||
|
||||
//////
|
||||
|
||||
js::Scalar::Type reqScalarType;
|
||||
if (!GetJSScalarFromGLType(type, &reqScalarType)) {
|
||||
ErrorInvalidEnum("readPixels: Bad `type`.");
|
||||
|
@ -342,6 +342,11 @@ WebGLContext::TexImage2D(GLenum rawTexImageTarget, GLint level, GLenum internalF
|
||||
return;
|
||||
}
|
||||
|
||||
const dom::ArrayBufferView* view = nullptr;
|
||||
if (!maybeView.IsNull()) {
|
||||
view = &maybeView.Value();
|
||||
}
|
||||
|
||||
const bool isSubImage = false;
|
||||
const GLint xOffset = 0;
|
||||
const GLint yOffset = 0;
|
||||
@ -349,13 +354,13 @@ WebGLContext::TexImage2D(GLenum rawTexImageTarget, GLint level, GLenum internalF
|
||||
const GLsizei depth = 1;
|
||||
tex->TexOrSubImage(isSubImage, funcName, target, level, internalFormat, xOffset,
|
||||
yOffset, zOffset, width, height, depth, border, unpackFormat,
|
||||
unpackType, maybeView);
|
||||
unpackType, view);
|
||||
}
|
||||
|
||||
void
|
||||
WebGLContext::TexImage2D(GLenum rawTexImageTarget, GLint level, GLenum internalFormat,
|
||||
GLenum unpackFormat, GLenum unpackType,
|
||||
dom::ImageData* imageData, ErrorResult&)
|
||||
const dom::ImageData& imageData, ErrorResult&)
|
||||
{
|
||||
const char funcName[] = "texImage2D";
|
||||
const uint8_t funcDims = 2;
|
||||
@ -378,8 +383,8 @@ WebGLContext::TexImage2D(GLenum rawTexImageTarget, GLint level, GLenum internalF
|
||||
|
||||
void
|
||||
WebGLContext::TexImage2D(GLenum rawTexImageTarget, GLint level, GLenum internalFormat,
|
||||
GLenum unpackFormat, GLenum unpackType, dom::Element* elem,
|
||||
ErrorResult* const out_error)
|
||||
GLenum unpackFormat, GLenum unpackType, const dom::Element& elem,
|
||||
ErrorResult& out_error)
|
||||
{
|
||||
const char funcName[] = "texImage2D";
|
||||
const uint8_t funcDims = 2;
|
||||
@ -397,7 +402,7 @@ WebGLContext::TexImage2D(GLenum rawTexImageTarget, GLint level, GLenum internalF
|
||||
const GLint yOffset = 0;
|
||||
const GLint zOffset = 0;
|
||||
tex->TexOrSubImage(isSubImage, funcName, target, level, internalFormat, xOffset,
|
||||
yOffset, zOffset, unpackFormat, unpackType, elem, out_error);
|
||||
yOffset, zOffset, unpackFormat, unpackType, elem, &out_error);
|
||||
}
|
||||
|
||||
////////////////////////////////////////
|
||||
@ -407,8 +412,7 @@ void
|
||||
WebGLContext::TexSubImage2D(GLenum rawTexImageTarget, GLint level, GLint xOffset,
|
||||
GLint yOffset, GLsizei width, GLsizei height,
|
||||
GLenum unpackFormat, GLenum unpackType,
|
||||
const dom::Nullable<dom::ArrayBufferView>& maybeView,
|
||||
ErrorResult&)
|
||||
const dom::ArrayBufferView& view)
|
||||
{
|
||||
const char funcName[] = "texSubImage2D";
|
||||
const uint8_t funcDims = 2;
|
||||
@ -428,13 +432,13 @@ WebGLContext::TexSubImage2D(GLenum rawTexImageTarget, GLint level, GLint xOffset
|
||||
const GLint border = 0;
|
||||
tex->TexOrSubImage(isSubImage, funcName, target, level, internalFormat, xOffset,
|
||||
yOffset, zOffset, width, height, depth, border, unpackFormat,
|
||||
unpackType, maybeView);
|
||||
unpackType, &view);
|
||||
}
|
||||
|
||||
void
|
||||
WebGLContext::TexSubImage2D(GLenum rawTexImageTarget, GLint level, GLint xOffset,
|
||||
GLint yOffset, GLenum unpackFormat, GLenum unpackType,
|
||||
dom::ImageData* imageData, ErrorResult&)
|
||||
const dom::ImageData& imageData, ErrorResult&)
|
||||
{
|
||||
const char funcName[] = "texSubImage2D";
|
||||
const uint8_t funcDims = 2;
|
||||
@ -457,7 +461,7 @@ WebGLContext::TexSubImage2D(GLenum rawTexImageTarget, GLint level, GLint xOffset
|
||||
void
|
||||
WebGLContext::TexSubImage2D(GLenum rawTexImageTarget, GLint level, GLint xOffset,
|
||||
GLint yOffset, GLenum unpackFormat, GLenum unpackType,
|
||||
dom::Element* elem, ErrorResult* const out_error)
|
||||
const dom::Element& elem, ErrorResult& out_error)
|
||||
{
|
||||
const char funcName[] = "texSubImage2D";
|
||||
const uint8_t funcDims = 2;
|
||||
@ -474,7 +478,7 @@ WebGLContext::TexSubImage2D(GLenum rawTexImageTarget, GLint level, GLint xOffset
|
||||
const GLenum internalFormat = 0;
|
||||
const GLint zOffset = 0;
|
||||
tex->TexOrSubImage(isSubImage, funcName, target, level, internalFormat, xOffset,
|
||||
yOffset, zOffset, unpackFormat, unpackType, elem, out_error);
|
||||
yOffset, zOffset, unpackFormat, unpackType, elem, &out_error);
|
||||
}
|
||||
|
||||
////////////////////////////////////////
|
||||
|
@ -236,17 +236,17 @@ public:
|
||||
GLint level, GLenum internalFormat, GLint xOffset, GLint yOffset,
|
||||
GLint zOffset, GLsizei width, GLsizei height, GLsizei depth,
|
||||
GLint border, GLenum unpackFormat, GLenum unpackType,
|
||||
const dom::Nullable<dom::ArrayBufferView>& maybeView);
|
||||
const dom::ArrayBufferView* view);
|
||||
|
||||
void TexOrSubImage(bool isSubImage, const char* funcName, TexImageTarget target,
|
||||
GLint level, GLenum internalFormat, GLint xOffset, GLint yOffset,
|
||||
GLint zOffset, GLenum unpackFormat, GLenum unpackType,
|
||||
dom::ImageData* imageData);
|
||||
const dom::ImageData& imageData);
|
||||
|
||||
void TexOrSubImage(bool isSubImage, const char* funcName, TexImageTarget target,
|
||||
GLint level, GLenum internalFormat, GLint xOffset, GLint yOffset,
|
||||
GLint zOffset, GLenum unpackFormat, GLenum unpackType,
|
||||
dom::Element* elem, ErrorResult* const out_error);
|
||||
const dom::Element& elem, ErrorResult* const out_error);
|
||||
|
||||
void TexOrSubImage(bool isSubImage, const char* funcName, TexImageTarget target,
|
||||
GLint level, GLenum internalFormat, GLint xOffset, GLint yOffset,
|
||||
|
@ -227,7 +227,7 @@ WebGLTexture::TexOrSubImage(bool isSubImage, const char* funcName, TexImageTarge
|
||||
GLint yOffset, GLint zOffset, GLsizei rawWidth,
|
||||
GLsizei rawHeight, GLsizei rawDepth, GLint border,
|
||||
GLenum unpackFormat, GLenum unpackType,
|
||||
const dom::Nullable<dom::ArrayBufferView>& maybeView)
|
||||
const dom::ArrayBufferView* view)
|
||||
{
|
||||
uint32_t width, height, depth;
|
||||
if (!ValidateExtents(mContext, funcName, rawWidth, rawHeight, rawDepth, border,
|
||||
@ -246,22 +246,17 @@ WebGLTexture::TexOrSubImage(bool isSubImage, const char* funcName, TexImageTarge
|
||||
const uint8_t* bytes = nullptr;
|
||||
uint32_t byteCount = 0;
|
||||
|
||||
if (!maybeView.IsNull()) {
|
||||
const auto& view = maybeView.Value();
|
||||
if (view) {
|
||||
view->ComputeLengthAndData();
|
||||
bytes = view->DataAllowShared();
|
||||
byteCount = view->LengthAllowShared();
|
||||
|
||||
const auto jsType = JS_GetArrayBufferViewType(view.Obj());
|
||||
const auto& jsType = view->Type();
|
||||
if (!DoesJSTypeMatchUnpackType(pi.type, jsType)) {
|
||||
mContext->ErrorInvalidOperation("%s: `pixels` not compatible with `type`.",
|
||||
funcName);
|
||||
return;
|
||||
}
|
||||
|
||||
if (width && height && depth) {
|
||||
view.ComputeLengthAndData();
|
||||
|
||||
bytes = view.DataAllowShared();
|
||||
byteCount = view.LengthAllowShared();
|
||||
}
|
||||
} else if (isSubImage) {
|
||||
mContext->ErrorInvalidValue("%s: `pixels` must not be null.", funcName);
|
||||
return;
|
||||
@ -336,16 +331,16 @@ WebGLTexture::TexOrSubImage(bool isSubImage, const char* funcName, TexImageTarge
|
||||
|
||||
static already_AddRefed<gfx::DataSourceSurface>
|
||||
FromImageData(WebGLContext* webgl, const char* funcName, GLenum unpackType,
|
||||
dom::ImageData* imageData, dom::Uint8ClampedArray* scopedArr)
|
||||
const dom::ImageData& imageData, dom::Uint8ClampedArray* scopedArr)
|
||||
{
|
||||
DebugOnly<bool> inited = scopedArr->Init(imageData->GetDataObject());
|
||||
DebugOnly<bool> inited = scopedArr->Init(imageData.GetDataObject());
|
||||
MOZ_ASSERT(inited);
|
||||
|
||||
scopedArr->ComputeLengthAndData();
|
||||
const DebugOnly<size_t> dataSize = scopedArr->Length();
|
||||
const void* const data = scopedArr->Data();
|
||||
|
||||
const gfx::IntSize size(imageData->Width(), imageData->Height());
|
||||
const gfx::IntSize size(imageData.Width(), imageData.Height());
|
||||
const size_t stride = size.width * 4;
|
||||
const gfx::SurfaceFormat surfFormat = gfx::SurfaceFormat::R8G8B8A8;
|
||||
|
||||
@ -370,22 +365,16 @@ void
|
||||
WebGLTexture::TexOrSubImage(bool isSubImage, const char* funcName, TexImageTarget target,
|
||||
GLint level, GLenum internalFormat, GLint xOffset,
|
||||
GLint yOffset, GLint zOffset, GLenum unpackFormat,
|
||||
GLenum unpackType, dom::ImageData* imageData)
|
||||
GLenum unpackType, const dom::ImageData& imageData)
|
||||
{
|
||||
const bool usePBOs = false;
|
||||
webgl::PackingInfo pi;
|
||||
if (!mContext->ValidateUnpackInfo(funcName, usePBOs, unpackFormat, unpackType, &pi))
|
||||
return;
|
||||
|
||||
if (!imageData) {
|
||||
// Spec says to generate an INVALID_VALUE error
|
||||
mContext->ErrorInvalidValue("%s: Null ImageData.", funcName);
|
||||
return;
|
||||
}
|
||||
|
||||
// Eventually, these will be args.
|
||||
const uint32_t width = imageData->Width();
|
||||
const uint32_t height = imageData->Height();
|
||||
const uint32_t width = imageData.Width();
|
||||
const uint32_t height = imageData.Height();
|
||||
const uint32_t depth = 1;
|
||||
|
||||
dom::RootedTypedArray<dom::Uint8ClampedArray> scopedArr(dom::RootingCx());
|
||||
@ -403,7 +392,7 @@ WebGLTexture::TexOrSubImage(bool isSubImage, const char* funcName, TexImageTarge
|
||||
webgl::TexUnpackSurface blob(mContext, target, width, height, depth, surf,
|
||||
isAlphaPremult);
|
||||
|
||||
const uint32_t fullRows = imageData->Height();
|
||||
const uint32_t fullRows = imageData.Height();
|
||||
const uint32_t tailPixels = 0;
|
||||
if (!mContext->ValidateUnpackPixels(funcName, fullRows, tailPixels, &blob))
|
||||
return;
|
||||
@ -419,7 +408,7 @@ void
|
||||
WebGLTexture::TexOrSubImage(bool isSubImage, const char* funcName, TexImageTarget target,
|
||||
GLint level, GLenum internalFormat, GLint xOffset,
|
||||
GLint yOffset, GLint zOffset, GLenum unpackFormat,
|
||||
GLenum unpackType, dom::Element* elem,
|
||||
GLenum unpackType, const dom::Element& elem,
|
||||
ErrorResult* const out_error)
|
||||
{
|
||||
const bool usePBOs = false;
|
||||
@ -439,7 +428,8 @@ WebGLTexture::TexOrSubImage(bool isSubImage, const char* funcName, TexImageTarge
|
||||
flags |= nsLayoutUtils::SFE_PREFER_NO_PREMULTIPLY_ALPHA;
|
||||
|
||||
RefPtr<gfx::DrawTarget> idealDrawTarget = nullptr; // Don't care for now.
|
||||
auto sfer = nsLayoutUtils::SurfaceFromElement(elem, flags, idealDrawTarget);
|
||||
auto sfer = nsLayoutUtils::SurfaceFromElement(const_cast<dom::Element*>(&elem), flags,
|
||||
idealDrawTarget);
|
||||
|
||||
//////
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user