Bug 721230 - Implement a compressed texture support stub for WebGL conformance. r=bjacob

This commit is contained in:
Jon Buckley 2012-01-28 16:15:27 -05:00
parent 9f3a3972b2
commit ae7d4a9222
4 changed files with 160 additions and 2 deletions

View File

@ -223,6 +223,107 @@ nsIDOMWebGLRenderingContext_BufferSubData(JSContext *cx, uintN argc, jsval *vp)
return JS_TRUE;
}
/*
* CompressedTexImage2D takes:
* CompressedTexImage2D(uint, int, uint, int, int, int, ArrayBufferView)
*/
static JSBool
nsIDOMWebGLRenderingContext_CompressedTexImage2D(JSContext *cx, uintN argc, jsval *vp)
{
XPC_QS_ASSERT_CONTEXT_OK(cx);
JSObject *obj = JS_THIS_OBJECT(cx, vp);
if (!obj)
return JS_FALSE;
nsresult rv;
nsIDOMWebGLRenderingContext *self;
xpc_qsSelfRef selfref;
JS::AutoValueRooter tvr(cx);
if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.jsval_addr(), nsnull))
return JS_FALSE;
if (argc != 7)
return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
jsval *argv = JS_ARGV(cx, vp);
GET_UINT32_ARG(argv0, 0);
GET_INT32_ARG(argv1, 1);
GET_UINT32_ARG(argv2, 2);
GET_INT32_ARG(argv3, 3);
GET_INT32_ARG(argv4, 4);
GET_INT32_ARG(argv5, 5);
if (!JSVAL_IS_PRIMITIVE(argv[6])) {
JSObject* argv6 = JSVAL_TO_OBJECT(argv[6]);
if (js_IsTypedArray(argv6)) {
rv = self->CompressedTexImage2D_array(argv0, argv1, argv2, argv3, argv4, argv5,
js::TypedArray::getTypedArray(argv6));
} else {
xpc_qsThrowBadArg(cx, NS_ERROR_FAILURE, vp, 6);
return JS_FALSE;
}
} else {
xpc_qsThrow(cx, NS_ERROR_FAILURE);
return JS_FALSE;
}
*vp = JSVAL_VOID;
return JS_TRUE;
}
/*
* CompressedTexSubImage2D takes:
* CompressedTexSubImage2D(uint, int, int, int, int, int, uint, ArrayBufferView)
*/
static JSBool
nsIDOMWebGLRenderingContext_CompressedTexSubImage2D(JSContext *cx, uintN argc, jsval *vp)
{
XPC_QS_ASSERT_CONTEXT_OK(cx);
JSObject *obj = JS_THIS_OBJECT(cx, vp);
if (!obj)
return JS_FALSE;
nsresult rv;
nsIDOMWebGLRenderingContext *self;
xpc_qsSelfRef selfref;
JS::AutoValueRooter tvr(cx);
if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.jsval_addr(), nsnull))
return JS_FALSE;
if (argc != 7)
return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
jsval *argv = JS_ARGV(cx, vp);
GET_UINT32_ARG(argv0, 0);
GET_INT32_ARG(argv1, 1);
GET_INT32_ARG(argv2, 2);
GET_INT32_ARG(argv3, 3);
GET_INT32_ARG(argv4, 4);
GET_INT32_ARG(argv5, 5);
GET_UINT32_ARG(argv6, 6);
if (!JSVAL_IS_PRIMITIVE(argv[7])) {
JSObject* argv7 = JSVAL_TO_OBJECT(argv[7]);
if (js_IsTypedArray(argv7)) {
rv = self->CompressedTexSubImage2D_array(argv0, argv1, argv2, argv3, argv4, argv5,
argv6, js::TypedArray::getTypedArray(argv7));
} else {
xpc_qsThrowBadArg(cx, NS_ERROR_FAILURE, vp, 7);
return JS_FALSE;
}
} else {
xpc_qsThrow(cx, NS_ERROR_FAILURE);
return JS_FALSE;
}
*vp = JSVAL_VOID;
return JS_TRUE;
}
/*
* ReadPixels takes:
* ReadPixels(int, int, int, int, uint, uint, ArrayBufferView)

View File

@ -2191,7 +2191,7 @@ WebGLContext::GetParameter(PRUint32 pname, nsIVariant **retval)
wrval->SetAsInt32(0);
break;
case LOCAL_GL_COMPRESSED_TEXTURE_FORMATS:
wrval->SetAsEmpty(); // the spec says we must return null
wrval->SetAsEmptyArray();
break;
// unsigned int. here we may have to return very large values like 2^32-1 that can't be represented as
@ -4459,6 +4459,51 @@ WebGLContext::CompileShader(nsIWebGLShader *sobj)
return NS_OK;
}
NS_IMETHODIMP
WebGLContext::CompressedTexImage2D(PRInt32)
{
NS_RUNTIMEABORT("CompressedTexImage2D(PRInt32) should never be called");
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP
WebGLContext::CompressedTexImage2D_array(WebGLenum target, WebGLint level, WebGLenum internalformat,
WebGLsizei width, WebGLsizei height, WebGLint border,
JSObject *pixels)
{
if (!IsContextStable())
return NS_OK;
WebGLTexture *tex = activeBoundTextureForTarget(target);
if (!tex)
return ErrorInvalidOperation("compressedTexImage2D: no texture is bound to this target");
return ErrorInvalidEnum("compressedTexImage2D: compressed textures are not supported");
}
NS_IMETHODIMP
WebGLContext::CompressedTexSubImage2D(PRInt32)
{
NS_RUNTIMEABORT("CompressedTexSubImage2D(PRInt32) should never be called");
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP
WebGLContext::CompressedTexSubImage2D_array(WebGLenum target, WebGLint level, WebGLint xoffset,
WebGLint yoffset, WebGLsizei width, WebGLsizei height,
WebGLenum format, JSObject *pixels)
{
if (!IsContextStable())
return NS_OK;
WebGLTexture *tex = activeBoundTextureForTarget(target);
if (!tex)
return ErrorInvalidOperation("compressedTexSubImage2D: no texture is bound to this target");
return ErrorInvalidEnum("compressedTexSubImage2D: compressed textures are not supported");
}
NS_IMETHODIMP
WebGLContext::GetShaderParameter(nsIWebGLShader *sobj, WebGLenum pname, nsIVariant **retval)

View File

@ -168,7 +168,7 @@ interface nsIWebGLExtensionLoseContext : nsIWebGLExtension
void restoreContext();
};
[scriptable, builtinclass, uuid(ef15ae85-4670-4dc4-848d-51ca81e8397a)]
[scriptable, builtinclass, uuid(f000afac-11b3-4c06-a35f-8db411f1cf54)]
interface nsIDOMWebGLRenderingContext : nsISupports
{
//
@ -632,6 +632,16 @@ interface nsIDOMWebGLRenderingContext : nsISupports
void colorMask(in WebGLboolean red, in WebGLboolean green, in WebGLboolean blue, in WebGLboolean alpha);
void compileShader([optional] in nsIWebGLShader shader);
void compressedTexImage2D([optional] in long dummy);
[noscript] void compressedTexImage2D_array(in WebGLenum target, in WebGLint level, in WebGLenum internalformat,
in WebGLsizei width, in WebGLsizei height, in WebGLint border,
in WebGLJSObjectPtr pixels);
void compressedTexSubImage2D([optional] in long dummy);
[noscript] void compressedTexSubImage2D_array(in WebGLenum target, in WebGLint level, in WebGLint xoffset,
in WebGLint yoffset, in WebGLsizei width, in WebGLsizei height,
in WebGLenum format, in WebGLJSObjectPtr pixels);
void copyTexImage2D(in WebGLenum target, in WebGLint level, in WebGLenum internalformat,
in WebGLint x, in WebGLint y, in WebGLsizei width, in WebGLsizei height, in WebGLint border);
void copyTexSubImage2D(in WebGLenum target, in WebGLint level, in WebGLint xoffset, in WebGLint yoffset,

View File

@ -978,6 +978,8 @@ customMethodCalls = {
'nsIDOMWebGLRenderingContext_ReadPixels': CUSTOM_QS,
'nsIDOMWebGLRenderingContext_TexImage2D': CUSTOM_QS,
'nsIDOMWebGLRenderingContext_TexSubImage2D': CUSTOM_QS,
'nsIDOMWebGLRenderingContext_CompressedTexImage2D': CUSTOM_QS,
'nsIDOMWebGLRenderingContext_CompressedTexSubImage2D': CUSTOM_QS,
'nsIDOMWebGLRenderingContext_Uniform1iv': CUSTOM_QS_TN,
'nsIDOMWebGLRenderingContext_Uniform2iv': CUSTOM_QS_TN,
'nsIDOMWebGLRenderingContext_Uniform3iv': CUSTOM_QS_TN,