b=533663; use js typed arrays in webgl; r=jmuizelaar,mrbkap,brendan

This commit is contained in:
Vladimir Vukicevic 2010-01-22 13:34:25 -08:00
parent 2a8fc41f02
commit 553a8c9c5a
11 changed files with 1646 additions and 1071 deletions

File diff suppressed because it is too large Load Diff

View File

@ -46,7 +46,9 @@ MODULE = content
LIBRARY_NAME = gkconcvs_s
LIBXUL_LIBRARY = 1
EXPORTS = \
CustomQS_WebGL.h \
$(NULL)
CPPSRCS = \
CanvasUtils.cpp \
@ -82,7 +84,6 @@ WEBGL_PLATFORM = CGL
endif
CPPSRCS += \
WebGLArrays.cpp \
WebGLContext.cpp \
WebGLContextGL.cpp \
WebGLContextUtils.cpp \

View File

@ -15,8 +15,6 @@
#include "CanvasUtils.h"
#include "NativeJSContext.h"
#include "WebGLArray.h"
using namespace mozilla;
nsresult NS_NewCanvasRenderingContextWebGL(nsICanvasRenderingContextWebGL** aResult);

View File

@ -58,13 +58,10 @@
#include "SimpleBuffer.h"
#include "nsGLPbuffer.h"
#include "WebGLArrays.h"
class nsIDocShell;
namespace mozilla {
class WebGLArray;
class WebGLTexture;
class WebGLBuffer;
class WebGLProgram;
@ -264,9 +261,20 @@ protected:
void MakeContextCurrent() { mGLPbuffer->MakeContextCurrent(); }
nsresult TexImageElementBase(nsIDOMHTMLElement *imageOrCanvas,
gfxImageSurface **imageOut,
PRBool flipY, PRBool premultiplyAlpha);
// helpers
nsresult TexImage2D_base(GLenum target, GLint level, GLenum internalformat,
GLsizei width, GLsizei height, GLint border,
GLenum format, GLenum type,
void *data, PRUint32 byteLength);
nsresult TexSubImage2D_base(GLenum target, GLint level,
GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height,
GLenum format, GLenum type,
void *pixels, PRUint32 byteLength);
nsresult DOMElementToImageSurface(nsIDOMElement *imageOrCanvas,
gfxImageSurface **imageOut,
PRBool flipY, PRBool premultiplyAlpha);
GLuint mActiveTexture;
@ -343,42 +351,32 @@ class WebGLBuffer :
{
public:
WebGLBuffer(GLuint name)
: mName(name), mDeleted(PR_FALSE), mGLType(0)
: mName(name), mDeleted(PR_FALSE), mByteLength(0)
{ }
void Delete() {
if (mDeleted)
return;
ZeroOwners();
mDeleted = PR_TRUE;
mByteLength = 0;
}
PRBool Deleted() { return mDeleted; }
GLuint GLName() { return mName; }
PRUint32 ByteLength() { return mByteLength; }
void Set(nsIWebGLArray *na) {
mGLType = na->NativeType();
mElementSize = na->NativeElementSize();
mCount = na->NativeCount();
void SetByteLength(GLuint len) {
mByteLength = len;
}
void SetCount(GLuint count) {
mCount = count;
}
GLenum GLType() { return mGLType; }
PRUint32 ByteCount() { return mElementSize * mCount; }
PRUint32 Count() { return mCount; }
PRUint32 ElementSize() { return mElementSize; }
NS_DECL_ISUPPORTS
NS_DECL_NSIWEBGLBUFFER
protected:
GLuint mName;
PRBool mDeleted;
GLenum mGLType;
PRUint32 mElementSize;
PRUint32 mCount;
PRUint32 mByteLength;
};
class WebGLTexture :

File diff suppressed because it is too large Load Diff

View File

@ -81,17 +81,17 @@ WebGLContext::ValidateBuffers(PRUint32 count)
// is this a problem?
if (!vd.enabled)
continue;
continue;
if (vd.buf == nsnull) {
LogMessage("No VBO bound to index %d (or it's been deleted)!", i);
return PR_FALSE;
LogMessage("No VBO bound to index %d (or it's been deleted)!", i);
return PR_FALSE;
}
GLuint needed = vd.offset + (vd.stride ? vd.stride : vd.size) * count;
if (vd.buf->Count() < needed) {
LogMessage("VBO too small for bound attrib index %d: need at least %d elements, but have only %d", i, needed, vd.buf->Count());
return PR_FALSE;
if (vd.buf->ByteLength() < needed) {
LogMessage("VBO too small for bound attrib index %d: need at least %d bytes, but have only %d", i, needed, vd.buf->ByteLength());
return PR_FALSE;
}
}

View File

@ -435,7 +435,6 @@
#include "nsIDOMCanvasRenderingContext2D.h"
#include "nsICanvasRenderingContextWebGL.h"
#include "WebGLArray.h"
#include "nsIImageDocument.h"
@ -1321,29 +1320,6 @@ static nsDOMClassInfoData sClassInfoData[] = {
DOM_DEFAULT_SCRIPTABLE_FLAGS)
NS_DEFINE_CLASSINFO_DATA(WebGLRenderbuffer, nsDOMGenericSH,
DOM_DEFAULT_SCRIPTABLE_FLAGS)
NS_DEFINE_CLASSINFO_DATA(WebGLArrayBuffer, nsDOMGenericSH,
DOM_DEFAULT_SCRIPTABLE_FLAGS)
NS_DEFINE_CLASSINFO_DATA(WebGLFloatArray, nsDOMGenericSH,
nsIXPCScriptable::DONT_ENUM_QUERY_INTERFACE |
nsIXPCScriptable::CLASSINFO_INTERFACES_ONLY)
NS_DEFINE_CLASSINFO_DATA(WebGLByteArray, nsDOMGenericSH,
nsIXPCScriptable::DONT_ENUM_QUERY_INTERFACE |
nsIXPCScriptable::CLASSINFO_INTERFACES_ONLY)
NS_DEFINE_CLASSINFO_DATA(WebGLUnsignedByteArray, nsDOMGenericSH,
nsIXPCScriptable::DONT_ENUM_QUERY_INTERFACE |
nsIXPCScriptable::CLASSINFO_INTERFACES_ONLY)
NS_DEFINE_CLASSINFO_DATA(WebGLShortArray, nsDOMGenericSH,
nsIXPCScriptable::DONT_ENUM_QUERY_INTERFACE |
nsIXPCScriptable::CLASSINFO_INTERFACES_ONLY)
NS_DEFINE_CLASSINFO_DATA(WebGLUnsignedShortArray, nsDOMGenericSH,
nsIXPCScriptable::DONT_ENUM_QUERY_INTERFACE |
nsIXPCScriptable::CLASSINFO_INTERFACES_ONLY)
NS_DEFINE_CLASSINFO_DATA(WebGLIntArray, nsDOMGenericSH,
nsIXPCScriptable::DONT_ENUM_QUERY_INTERFACE |
nsIXPCScriptable::CLASSINFO_INTERFACES_ONLY)
NS_DEFINE_CLASSINFO_DATA(WebGLUnsignedIntArray, nsDOMGenericSH,
nsIXPCScriptable::DONT_ENUM_QUERY_INTERFACE |
nsIXPCScriptable::CLASSINFO_INTERFACES_ONLY)
NS_DEFINE_CLASSINFO_DATA(PaintRequest, nsDOMGenericSH,
DOM_DEFAULT_SCRIPTABLE_FLAGS)
@ -1391,16 +1367,6 @@ struct nsConstructorFuncMapData
static const nsConstructorFuncMapData kConstructorFuncMap[] =
{
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(Worker, nsDOMWorker::NewWorker)
// WebGL Array Types
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(WebGLArrayBuffer, NS_NewWebGLArrayBuffer)
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(WebGLFloatArray, NS_NewWebGLFloatArray)
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(WebGLByteArray, NS_NewWebGLByteArray)
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(WebGLUnsignedByteArray, NS_NewWebGLUnsignedByteArray)
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(WebGLShortArray, NS_NewWebGLShortArray)
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(WebGLUnsignedShortArray, NS_NewWebGLUnsignedShortArray)
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(WebGLIntArray, NS_NewWebGLIntArray)
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(WebGLUnsignedIntArray, NS_NewWebGLUnsignedIntArray)
};
nsIXPConnect *nsDOMClassInfo::sXPConnect = nsnull;
@ -3741,38 +3707,6 @@ nsDOMClassInfo::Init()
DOM_CLASSINFO_MAP_ENTRY(nsIWebGLRenderbuffer)
DOM_CLASSINFO_MAP_END
DOM_CLASSINFO_MAP_BEGIN(WebGLArrayBuffer, nsIWebGLArrayBuffer)
DOM_CLASSINFO_MAP_ENTRY(nsIWebGLArrayBuffer)
DOM_CLASSINFO_MAP_END
DOM_CLASSINFO_MAP_BEGIN(WebGLFloatArray, nsIWebGLFloatArray)
DOM_CLASSINFO_MAP_ENTRY(nsIWebGLFloatArray)
DOM_CLASSINFO_MAP_END
DOM_CLASSINFO_MAP_BEGIN(WebGLByteArray, nsIWebGLByteArray)
DOM_CLASSINFO_MAP_ENTRY(nsIWebGLByteArray)
DOM_CLASSINFO_MAP_END
DOM_CLASSINFO_MAP_BEGIN(WebGLUnsignedByteArray, nsIWebGLUnsignedByteArray)
DOM_CLASSINFO_MAP_ENTRY(nsIWebGLUnsignedByteArray)
DOM_CLASSINFO_MAP_END
DOM_CLASSINFO_MAP_BEGIN(WebGLShortArray, nsIWebGLShortArray)
DOM_CLASSINFO_MAP_ENTRY(nsIWebGLShortArray)
DOM_CLASSINFO_MAP_END
DOM_CLASSINFO_MAP_BEGIN(WebGLUnsignedShortArray, nsIWebGLUnsignedShortArray)
DOM_CLASSINFO_MAP_ENTRY(nsIWebGLUnsignedShortArray)
DOM_CLASSINFO_MAP_END
DOM_CLASSINFO_MAP_BEGIN(WebGLIntArray, nsIWebGLIntArray)
DOM_CLASSINFO_MAP_ENTRY(nsIWebGLIntArray)
DOM_CLASSINFO_MAP_END
DOM_CLASSINFO_MAP_BEGIN(WebGLUnsignedIntArray, nsIWebGLUnsignedIntArray)
DOM_CLASSINFO_MAP_ENTRY(nsIWebGLUnsignedIntArray)
DOM_CLASSINFO_MAP_END
DOM_CLASSINFO_MAP_BEGIN(PaintRequest, nsIDOMPaintRequest)
DOM_CLASSINFO_MAP_ENTRY(nsIDOMPaintRequest)
DOM_CLASSINFO_MAP_END

View File

@ -468,16 +468,6 @@ enum nsDOMClassInfoID {
eDOMClassInfo_WebGLFramebuffer_id,
eDOMClassInfo_WebGLRenderbuffer_id,
// WebGL Buffers
eDOMClassInfo_WebGLArrayBuffer_id,
eDOMClassInfo_WebGLFloatArray_id,
eDOMClassInfo_WebGLByteArray_id,
eDOMClassInfo_WebGLUnsignedByteArray_id,
eDOMClassInfo_WebGLShortArray_id,
eDOMClassInfo_WebGLUnsignedShortArray_id,
eDOMClassInfo_WebGLIntArray_id,
eDOMClassInfo_WebGLUnsignedIntArray_id,
eDOMClassInfo_PaintRequest_id,
eDOMClassInfo_PaintRequestList_id,

View File

@ -38,6 +38,7 @@
#include "nsISupports.idl"
interface nsIDOMElement;
interface nsIDOMHTMLCanvasElement;
// XXX should we comment out these typedefs in the C++ header?
@ -62,113 +63,17 @@ typedef long GLfixed;
typedef long GLsizeiptr;
%{C++
namespace mozilla {
class WebGLArrayBuffer;
namespace js {
struct ArrayBuffer;
struct TypedArray;
}
/* Avoid conflict with WinAPI */
#undef NO_ERROR
%}
[ptr] native WebGLArrayBufferPtr (mozilla::WebGLArrayBuffer);
//
// Array types
//
[scriptable, uuid(34b6cf8e-47da-458e-ab42-0451a3533ee5)]
interface nsIWebGLArrayBuffer : nsISupports
{
readonly attribute unsigned long byteLength;
[noscript, notxpcom] WebGLArrayBufferPtr GetNativeArrayBuffer();
[noscript, notxpcom] voidPtr nativePointer();
[noscript, notxpcom] unsigned long nativeSize();
};
[scriptable, uuid(84ba4e98-8173-7c10-dca0-b5ba7809fcf3)]
interface nsIWebGLArray : nsISupports
{
readonly attribute nsIWebGLArrayBuffer buffer;
readonly attribute unsigned long byteOffset;
readonly attribute unsigned long byteLength;
readonly attribute unsigned long length;
// XXX kill this.
unsigned long alignedSizeInBytes();
nsIWebGLArray slice(in unsigned long offset, in unsigned long length);
[noscript, notxpcom] unsigned long nativeType();
[noscript, notxpcom] voidPtr nativePointer();
[noscript, notxpcom] unsigned long nativeSize();
[noscript, notxpcom] unsigned long nativeElementSize();
[noscript, notxpcom] unsigned long nativeCount();
};
[scriptable, Uuid(0f6d0e7b-bcfc-9305-6a1d-a9653b5e8c80)]
interface nsIWebGLFloatArray : nsIWebGLArray
{
[IndexGetter] float get(in unsigned long index);
//[IndexSetter] void set(in unsigned long index, in float value);
//void set(in CanvasFloatArray array, [Optional] in unsigned long offset);
//void set(in sequence<float> array, [Optional] in unsigned long offset);
void set();
};
[scriptable, uuid(b29db7cf-fa58-435f-8d45-611cc50979ad)]
interface nsIWebGLByteArray : nsIWebGLArray
{
[IndexGetter] long get(in unsigned long index);
//[IndexSetter] void set(in unsigned long index, in long value);
//void set(in nsIWebGLByteArray array, [Optional] in unsigned long offset);
//void set(in sequence<long> array, [Optional] in unsigned long offset);
void set();
};
[scriptable, uuid(3daa67fa-e743-2cbd-a212-805c2fc520cc)]
interface nsIWebGLUnsignedByteArray : nsIWebGLArray
{
[IndexGetter] unsigned long get(in unsigned long index);
//[IndexSetter] void set(in unsigned long index, in unsigned long value);
//void set(in CanvasUnsignedByteArray array, [Optional] in unsigned long offset);
//void set(in sequence<unsigned long> array, [Optional] in unsigned long offset);
void set();
};
[scriptable, uuid(a8a982e3-3977-7364-f012-c497a5ab7681)]
interface nsIWebGLShortArray : nsIWebGLArray
{
[IndexGetter] long get(in unsigned long index);
//[IndexSetter] void set(in unsigned long index, in long value);
//void set(in CanvasShortArray array, [Optional] in unsigned long offset);
//void set(in sequence<long> array, [Optional] in unsigned long offset);
void set();
};
[scriptable, uuid(8b9c67cc-c7be-a062-84b0-76a910a5c1e6)]
interface nsIWebGLUnsignedShortArray : nsIWebGLArray
{
[IndexGetter] unsigned long get(in unsigned long index);
//[IndexSetter] void set(in unsigned long index, in unsigned long value);
//void set(in CanvasUnsignedShortArray array, [Optional] in unsigned long offset);
//void set(in sequence<unsigned long> array, [Optional] in unsigned long offset);
void set();
};
[scriptable, uuid(b9b2e861-3a28-4311-993c-799e4f77dcba)]
interface nsIWebGLIntArray : nsIWebGLArray
{
[IndexGetter] long get(in unsigned long index);
//[IndexSetter] void set(in unsigned long index, in long value);
//void set(in CanvasIntArray array, [Optional] in unsigned long offset);
//void set(in sequence<long> array, [Optional] in unsigned long offset);
void set();
};
[scriptable, uuid(0d6ee3f8-71b6-460d-b05a-d579cc55edbe)]
interface nsIWebGLUnsignedIntArray : nsIWebGLArray
{
[IndexGetter] unsigned long get(in unsigned long index);
//[IndexSetter] void set(in unsigned long index, in unsigned long value);
//void set(in CanvasUnsignedIntArray array, [Optional] in unsigned long offset);
//void set(in sequence<unsigned long> array, [Optional] in unsigned long offset);
void set();
};
[ptr] native WebGLArrayBufferPtr (js::ArrayBuffer);
[ptr] native WebGLArrayPtr (js::TypedArray);
//
// OpenGL object wrappers
@ -199,7 +104,8 @@ interface nsIWebGLShader : nsISupports
};
[scriptable, uuid(beea4b38-3094-4e8d-b6e6-8b21d07e8994)]
interface nsIWebGLShaderArray {
interface nsIWebGLShaderArray : nsISupports
{
readonly attribute unsigned long length;
nsIWebGLShader item(in unsigned long index);
};
@ -217,7 +123,8 @@ interface nsIWebGLRenderbuffer : nsISupports
};
[scriptable, uuid(a85d4fd0-5b9f-4cb8-aeee-5a2c5c5bad76)]
interface nsIWebGLActiveInfo {
interface nsIWebGLActiveInfo : nsISupports
{
readonly attribute GLint size;
readonly attribute GLenum type;
readonly attribute DOMString name;
@ -231,6 +138,7 @@ interface nsICanvasRenderingContextWebGL : nsISupports
// ARRAY CONSTRUCTORS
//
/*
nsIWebGLFloatArray createFloatArray();
nsIWebGLByteArray createByteArray();
nsIWebGLUnsignedByteArray createUnsignedByteArray();
@ -238,6 +146,7 @@ interface nsICanvasRenderingContextWebGL : nsISupports
nsIWebGLUnsignedShortArray createUnsignedShortArray();
nsIWebGLIntArray createIntArray();
nsIWebGLUnsignedIntArray createUnsignedIntArray();
*/
//
// CONSTANTS
@ -357,10 +266,6 @@ interface nsICanvasRenderingContextWebGL : nsISupports
const unsigned long SAMPLE_COVERAGE = 0x80A0;
/* ErrorCode */
%{C++
/* Avoid conflict with WinAPI */
#undef NO_ERROR
%}
const unsigned long NO_ERROR = 0;
const unsigned long INVALID_ENUM = 0x0500;
const unsigned long INVALID_VALUE = 0x0501;
@ -695,15 +600,14 @@ interface nsICanvasRenderingContextWebGL : nsISupports
void blendFuncSeparate (in GLenum srcRGB, in GLenum dstRGB, in GLenum srcAlpha, in GLenum dstAlpha);
// Modified: void glBufferData (GLenum target, GLsizeiptr size, const void* data, GLenum usage);
// void bufferData (in GLenum target, in GLsizei size, in GLenum usage);
// void bufferData (in GLenum target, in nsIWebGLArray data, in GLenum usage);
// void bufferData (in GLenum target, in nsIWebGLArrayBuffer data, in GLenum usage);
void bufferData (in GLenum target);
void bufferData([optional] in long dummy);
[noscript] void bufferData_size (in GLenum target, in GLsizei size, in GLenum usage);
[noscript] void bufferData_buf (in GLenum target, in WebGLArrayBufferPtr data, in GLenum usage);
[noscript] void bufferData_array (in GLenum target, in WebGLArrayPtr data, in GLenum usage);
// Modified: void glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void* data);
// void bufferSubData (in GLenum target, in GLsizeiptr offset, in nsIWebGLArray data);
// void bufferSubData (in GLenum target, in GLsizeiptr offset, in CanvasArrayBuffer data);
void bufferSubData (in GLenum target, in GLsizeiptr offset);
void bufferSubData([optional] in long dummy);
[noscript] void bufferSubData_buf (in GLenum target, in GLsizeiptr offset, in WebGLArrayBufferPtr data);
[noscript] void bufferSubData_array (in GLenum target, in GLsizeiptr offset, in WebGLArrayPtr data);
GLenum checkFramebufferStatus (in GLenum target);
void clear (in GLbitfield mask);
@ -713,13 +617,10 @@ interface nsICanvasRenderingContextWebGL : nsISupports
void colorMask (in GLboolean red, in GLboolean green, in GLboolean blue, in GLboolean alpha);
void compileShader (in nsIWebGLShader shader);
//void glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data);
//void glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data);
void copyTexImage2D (in GLenum target, in GLint level, in GLenum internalformat,
in GLint x, in GLint y, in GLsizei width, in GLsizei height, in GLint border);
in GLint x, in GLint y, in GLsizei width, in GLsizei height, in GLint border);
void copyTexSubImage2D (in GLenum target, in GLint level, in GLint xoffset, in GLint yoffset,
in GLint x, in GLint y, in GLsizei width, in GLsizei height);
in GLint x, in GLint y, in GLsizei width, in GLsizei height);
nsIWebGLBuffer createBuffer();
nsIWebGLProgram createProgram ();
@ -867,28 +768,36 @@ interface nsICanvasRenderingContextWebGL : nsISupports
void stencilOp (in GLenum fail, in GLenum zfail, in GLenum zpass);
void stencilOpSeparate (in GLenum face, in GLenum fail, in GLenum zfail, in GLenum zpass);
// Modified: glTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
// GLint border, GLenum format, GLenum type, const void* pixels);
//void glTexImage2D (in GLenum target, in GLint level, in GLenum internalformat, in GLsizei width, in GLsizei height, in GLint border, in GLenum format, in GLenum type, nsIWebGLArray pixels);
//void glTexImage2D (in GLenum target, in GLint level, in HTMLImageElement image);
//void glTexImage2D (in GLenum target, in GLint level, in HTMLnsIWebGLElement canvas);
//void glTexImage2D (in GLenum target, in GLint level, in HTMLVideoElement video);
void texImage2D ();
void texImage2D([optional] in long dummy);
[noscript] void texImage2D_buf (in GLenum target, in GLint level, in GLenum internalformat,
in GLsizei width, in GLsizei height,
in GLint border, in GLenum format, in GLenum type, in WebGLArrayBufferPtr pixels);
[noscript] void texImage2D_array (in GLenum target, in GLint level, in GLenum internalformat,
in GLsizei width, in GLsizei height,
in GLint border, in GLenum format, in GLenum type, in WebGLArrayPtr pixels);
// HTMLImageElement, HTMLCanvasElement, HTMLVideoElement
[noscript] void texImage2D_dom (in GLenum target, in GLint level, in nsIDOMElement element,
[optional] in GLboolean premultiply, [optional] in GLboolean asPremultipliedAlpha);
void texSubImage2D([optional] in long dummy);
[noscript] void texSubImage2D_buf (in GLenum target, in GLint level,
in GLint xoffset, in GLint yoffset, in GLsizei width, in GLsizei height,
in GLenum format, in GLenum type, in WebGLArrayBufferPtr pixels);
[noscript] void texSubImage2D_array (in GLenum target, in GLint level,
in GLint xoffset, in GLint yoffset, in GLsizei width, in GLsizei height,
in GLenum format, in GLenum type, in WebGLArrayPtr pixels);
// HTMLImageElement, HTMLCanvasElement, HTMLVideoElement
[noscript] void texSubImage2D_dom (in GLenum target, in GLint level,
in GLint xoffset, in GLint yoffset, in GLsizei width, in GLsizei height,
in nsIDOMElement element,
[optional] in GLboolean premultiply, [optional] in GLboolean asPremultipliedAlpha);
// Modified: This replaces glTexParameterf, glTexParameterfv, glTexParameteri and glTexParameteriv
void texParameterf (in GLenum target, in GLenum pname, in GLfloat param);
void texParameteri (in GLenum target, in GLenum pname, in GLint param);
//void glTexParameter (in GLenum target, in GLenum pname, in nsIWebGLArray params);
// Modified: void glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels);
//void glTexSubImage2D (in GLenum target, in GLint level, in GLint xoffset, in GLint yoffset, in GLsizei width, in GLsizei height, in GLenum format, in GLenum type, nsIWebGLArray pixels);
//void glTexSubImage2D (in GLenum target, in GLint level, in GLint xoffset, in GLint yoffset, in GLsizei width, in GLsizei height, in HTMLImageElement image);
//void glTexSubImage2D (in GLenum target, in GLint level, in GLint xoffset, in GLint yoffset, in GLsizei width, in GLsizei height, in HTMLnsIWebGLElement canvas);
//void glTexSubImage2D (in GLenum target, in GLint level, in GLint xoffset, in GLint yoffset, in GLsizei width, in GLsizei height, in HTMLVideoElement video);
void texSubImage2D ();
// Modified: All the glUniform*v forms below are modified by replacing 'count' and 'v' with a nsIWebGLArray
void uniform1f (in GLint location, in GLfloat x);
void uniform1i (in GLint location, in GLint x);
@ -899,19 +808,32 @@ interface nsICanvasRenderingContextWebGL : nsISupports
void uniform4f (in GLint location, in GLfloat x, in GLfloat y, in GLfloat z, in GLfloat w);
void uniform4i (in GLint location, in GLint x, in GLint y, in GLint z, in GLint w);
void uniform1fv (in GLint location, in nsIWebGLArray v);
void uniform1iv (in GLint location, in nsIWebGLArray v);
void uniform2fv (in GLint location, in nsIWebGLArray v);
void uniform2iv (in GLint location, in nsIWebGLArray v);
void uniform3fv (in GLint location, in nsIWebGLArray v);
void uniform3iv (in GLint location, in nsIWebGLArray v);
void uniform4fv (in GLint location, in nsIWebGLArray v);
void uniform4iv (in GLint location, in nsIWebGLArray v);
void uniform1fv ([optional] in long dummy);
void uniform1iv ([optional] in long dummy);
void uniform2fv ([optional] in long dummy);
void uniform2iv ([optional] in long dummy);
void uniform3fv ([optional] in long dummy);
void uniform3iv ([optional] in long dummy);
void uniform4fv ([optional] in long dummy);
void uniform4iv ([optional] in long dummy);
// Modified. These are modified by replacing 'count' and 'value' with a nsIWebGLArray
void uniformMatrix2fv (in GLint location, in GLboolean transpose, in nsIWebGLArray value);
void uniformMatrix3fv (in GLint location, in GLboolean transpose, in nsIWebGLArray value);
void uniformMatrix4fv (in GLint location, in GLboolean transpose, in nsIWebGLArray value);
[noscript] void uniform1fv_array (in GLint location, in WebGLArrayPtr v);
[noscript] void uniform1iv_array (in GLint location, in WebGLArrayPtr v);
[noscript] void uniform2fv_array (in GLint location, in WebGLArrayPtr v);
[noscript] void uniform2iv_array (in GLint location, in WebGLArrayPtr v);
[noscript] void uniform3fv_array (in GLint location, in WebGLArrayPtr v);
[noscript] void uniform3iv_array (in GLint location, in WebGLArrayPtr v);
[noscript] void uniform4fv_array (in GLint location, in WebGLArrayPtr v);
[noscript] void uniform4iv_array (in GLint location, in WebGLArrayPtr v);
// Modified. These are modified by replacing 'count' and 'value' with a WebGLArrayPtr
void uniformMatrix2fv ([optional] in long dummy);
void uniformMatrix3fv ([optional] in long dummy);
void uniformMatrix4fv ([optional] in long dummy);
[noscript] void uniformMatrix2fv_array (in GLint location, in GLboolean transpose, in WebGLArrayPtr value);
[noscript] void uniformMatrix3fv_array (in GLint location, in GLboolean transpose, in WebGLArrayPtr value);
[noscript] void uniformMatrix4fv_array (in GLint location, in GLboolean transpose, in WebGLArrayPtr value);
// Added API using top entry from the passed nsIWebGLMatrixStack
//ZZ void glUniformMatrix (in GLint location, in GLboolean transpose, in nsIWebGLMatrixStack value);
@ -919,24 +841,24 @@ interface nsICanvasRenderingContextWebGL : nsISupports
void useProgram (in nsIWebGLProgram program);
void validateProgram (in nsIWebGLProgram program);
// Modified: All the glVertexAttrib*v forms below are modified by replacing 'values' with a nsIWebGLArray
// Modified: All the glVertexAttrib*v forms below are modified by replacing 'values' with a WebGLArrayPtr
void vertexAttrib1f (in GLuint indx, in GLfloat x);
void vertexAttrib2f (in GLuint indx, in GLfloat x, in GLfloat y);
void vertexAttrib3f (in GLuint indx, in GLfloat x, in GLfloat y, in GLfloat z);
void vertexAttrib4f (in GLuint indx, in GLfloat x, in GLfloat y, in GLfloat z, in GLfloat w);
void vertexAttrib1fv (in GLuint indx, in nsIWebGLArray values);
void vertexAttrib2fv (in GLuint indx, in nsIWebGLArray values);
void vertexAttrib3fv (in GLuint indx, in nsIWebGLArray values);
void vertexAttrib4fv (in GLuint indx, in nsIWebGLArray values);
void vertexAttrib1fv ([optional] in long dummy);
void vertexAttrib2fv ([optional] in long dummy);
void vertexAttrib3fv ([optional] in long dummy);
void vertexAttrib4fv ([optional] in long dummy);
// TBD
//void glVertexAttribPointer (in GLuint indx, GLint size, GLenum type, GLboolean normalized,
// GLsizei stride, const void* ptr);
[noscript] void vertexAttrib1fv_array (in GLuint indx, in WebGLArrayPtr values);
[noscript] void vertexAttrib2fv_array (in GLuint indx, in WebGLArrayPtr values);
[noscript] void vertexAttrib3fv_array (in GLuint indx, in WebGLArrayPtr values);
[noscript] void vertexAttrib4fv_array (in GLuint indx, in WebGLArrayPtr values);
// size is number of elements; type must match the bound vbo type; offset is in elements
// size is number of elements per attrib; offset, stride are in bytes
void vertexAttribPointer (in GLuint idx, in GLint size, in GLenum type, in GLboolean normalized, in GLuint stride, in GLuint offset);
void viewport (in GLint x, in GLint y, in GLsizei width, in GLsizei height);
};

View File

@ -88,47 +88,16 @@ members = [
# dom/interfaces/canvas
#
# nsIDOMCanvasRenderingContext2D
'nsIDOMCanvasRenderingContext2D.*',
# NOTE: attributes strokeStyle and fillStyle are nsIVariant
# NOTE: getImageData(), and putImageData() use
# NOTE: createImageDate(), getImageData(), and putImageData() use
# GetCurrentNativeCallContext
'nsIDOMCanvasRenderingContext2D.canvas',
'nsIDOMCanvasRenderingContext2D.save',
'nsIDOMCanvasRenderingContext2D.restore',
'nsIDOMCanvasRenderingContext2D.scale',
'nsIDOMCanvasRenderingContext2D.rotate',
'nsIDOMCanvasRenderingContext2D.translate',
'nsIDOMCanvasRenderingContext2D.transform',
'nsIDOMCanvasRenderingContext2D.setTransform',
'nsIDOMCanvasRenderingContext2D.globalAlpha',
'nsIDOMCanvasRenderingContext2D.globalCompositeOperation',
'nsIDOMCanvasRenderingContext2D.lineWidth',
'nsIDOMCanvasRenderingContext2D.lineCap',
'nsIDOMCanvasRenderingContext2D.lineJoin',
'nsIDOMCanvasRenderingContext2D.miterLimit',
'nsIDOMCanvasRenderingContext2D.clearRect',
'nsIDOMCanvasRenderingContext2D.fillRect',
'nsIDOMCanvasRenderingContext2D.strokeRect',
'nsIDOMCanvasRenderingContext2D.beginPath',
'nsIDOMCanvasRenderingContext2D.closePath',
'nsIDOMCanvasRenderingContext2D.moveTo',
'nsIDOMCanvasRenderingContext2D.lineTo',
'nsIDOMCanvasRenderingContext2D.quadraticCurveTo',
'nsIDOMCanvasRenderingContext2D.bezierCurveTo',
'nsIDOMCanvasRenderingContext2D.arcTo',
'nsIDOMCanvasRenderingContext2D.arc',
'nsIDOMCanvasRenderingContext2D.rect',
'nsIDOMCanvasRenderingContext2D.fill',
'nsIDOMCanvasRenderingContext2D.stroke',
'nsIDOMCanvasRenderingContext2D.clip',
'nsIDOMCanvasRenderingContext2D.font',
'nsIDOMCanvasRenderingContext2D.textAlign',
'nsIDOMCanvasRenderingContext2D.textBaseline',
'nsIDOMCanvasRenderingContext2D.fillText',
'nsIDOMCanvasRenderingContext2D.strokeText',
'nsIDOMCanvasRenderingContext2D.measureText',
'nsIDOMCanvasRenderingContext2D.drawImage',
'nsIDOMCanvasRenderingContext2D.isPointInPath',
'nsIDOMTextMetrics.width',
'-nsIDOMCanvasRenderingContext2D.strokeStyle',
'-nsIDOMCanvasRenderingContext2D.fillStyle',
'-nsIDOMCanvasRenderingContext2D.createImageData',
'-nsIDOMCanvasRenderingContext2D.getImageData',
'-nsIDOMCanvasRenderingContext2D.putImageData',
'nsIDOMTextMetrics.*',
# dom/interfaces/core
'nsIDOMCharacterData.data',
@ -475,6 +444,31 @@ members = [
'nsIDOMNSXPathExpression.evaluateWithContext',
# dom/interfaces/xul - None.
# webgl
'nsICanvasRenderingContextWebGL.*',
# These all use GetCurrentNativeCallContext and should be
# custom-quickstubbed.
'-nsICanvasRenderingContextWebGL.getActiveAttrib',
'-nsICanvasRenderingContextWebGL.getActiveUniform',
'-nsICanvasRenderingContextWebGL.getParameter',
'-nsICanvasRenderingContextWebGL.getBufferParameteri',
'-nsICanvasRenderingContextWebGL.getBufferParameter',
'-nsICanvasRenderingContextWebGL.getFramebufferAttachmentParameteri',
'-nsICanvasRenderingContextWebGL.getFramebufferAttachmentParameter',
'-nsICanvasRenderingContextWebGL.getRenderbufferParameteri',
'-nsICanvasRenderingContextWebGL.getRenderbufferParameter',
'-nsICanvasRenderingContextWebGL.getProgrami',
'-nsICanvasRenderingContextWebGL.getProgramParameter',
'-nsICanvasRenderingContextWebGL.texParameterf',
'-nsICanvasRenderingContextWebGL.texParameteri',
'-nsICanvasRenderingContextWebGL.getTexParameterf',
'-nsICanvasRenderingContextWebGL.getTexParameteri',
'-nsICanvasRenderingContextWebGL.getUniform',
'-nsICanvasRenderingContextWebGL.getVertexAttrib',
'-nsICanvasRenderingContextWebGL.readPixels',
'-nsICanvasRenderingContextWebGL.getShaderi',
'-nsICanvasRenderingContextWebGL.getShaderParameter',
]
# Most interfaces can be found by searching the includePath; to find
@ -490,7 +484,18 @@ irregularFilenames = {
# stowaways
'nsIDOMTextMetrics': 'nsIDOMCanvasRenderingContext2D',
'nsIDOMCanvasGradient': 'nsIDOMCanvasRenderingContext2D',
'nsIDOMCanvasPattern': 'nsIDOMCanvasRenderingContext2D',
'nsIXPointerResult': 'nsIXPointer',
'nsIWebGLTexture': 'nsICanvasRenderingContextWebGL',
'nsIWebGLBuffer': 'nsICanvasRenderingContextWebGL',
'nsIWebGLProgram': 'nsICanvasRenderingContextWebGL',
'nsIWebGLShader': 'nsICanvasRenderingContextWebGL',
'nsIWebGLShaderArray': 'nsICanvasRenderingContextWebGL',
'nsIWebGLFramebuffer': 'nsICanvasRenderingContextWebGL',
'nsIWebGLRenderbuffer': 'nsICanvasRenderingContextWebGL',
'nsIWebGLActiveInfo': 'nsICanvasRenderingContextWebGL',
}
customIncludes = [
@ -498,7 +503,11 @@ customIncludes = [
'nsIContent.h',
'nsIDocument.h',
'nsINodeList.h',
'nsCSSPropertiesQS.h'
'nsCSSPropertiesQS.h',
]
customQuickStubs = [
'CustomQS_WebGL.h'
]
nsIDOMNode_GetChildNodes_customMethodCallCode = """
@ -537,6 +546,16 @@ CSS2Properties_ = {
'canFail': True
}
CUSTOM_QS = {
'skipgen': True,
'traceable': False
}
CUSTOM_QS_TN = {
'skipgen': True,
'traceable': True
}
customMethodCalls = {
'nsIDOMNode_GetNextSibling': {
'thisType': 'nsINode',
@ -583,6 +602,26 @@ customMethodCalls = {
'code': nsIDOMStorage_Clear_customMethodCallCode
},
'nsIDOMCSS2Properties_': CSS2Properties_,
'nsIDOMNSCSS2Properties_': CSS2Properties_
'nsIDOMNSCSS2Properties_': CSS2Properties_,
# WebGL
'nsICanvasRenderingContextWebGL_BufferData': CUSTOM_QS,
'nsICanvasRenderingContextWebGL_BufferSubData': CUSTOM_QS,
'nsICanvasRenderingContextWebGL_TexImage2D': CUSTOM_QS,
'nsICanvasRenderingContextWebGL_TexSubImage2D': CUSTOM_QS,
'nsICanvasRenderingContextWebGL_Uniform1iv': CUSTOM_QS_TN,
'nsICanvasRenderingContextWebGL_Uniform2iv': CUSTOM_QS_TN,
'nsICanvasRenderingContextWebGL_Uniform3iv': CUSTOM_QS_TN,
'nsICanvasRenderingContextWebGL_Uniform4iv': CUSTOM_QS_TN,
'nsICanvasRenderingContextWebGL_Uniform1fv': CUSTOM_QS_TN,
'nsICanvasRenderingContextWebGL_Uniform2fv': CUSTOM_QS_TN,
'nsICanvasRenderingContextWebGL_Uniform3fv': CUSTOM_QS_TN,
'nsICanvasRenderingContextWebGL_Uniform4fv': CUSTOM_QS_TN,
'nsICanvasRenderingContextWebGL_UniformMatrix2fv': CUSTOM_QS_TN,
'nsICanvasRenderingContextWebGL_UniformMatrix3fv': CUSTOM_QS_TN,
'nsICanvasRenderingContextWebGL_UniformMatrix4fv': CUSTOM_QS_TN,
'nsICanvasRenderingContextWebGL_VertexAttrib1fv': CUSTOM_QS,
'nsICanvasRenderingContextWebGL_VertexAttrib2fv': CUSTOM_QS,
'nsICanvasRenderingContextWebGL_VertexAttrib3fv': CUSTOM_QS,
'nsICanvasRenderingContextWebGL_VertexAttrib4fv': CUSTOM_QS
}

View File

@ -326,8 +326,12 @@ def readConfigFile(filename, includePath, cachedir, traceable):
# Stub all scriptable members of this interface.
for member in iface.members:
if member.kind in ('method', 'attribute') and not member.noscript:
cmc = conf.customMethodCalls.get(interfaceName + "_" + header.methodNativeName(member), None)
mayTrace = cmc is None or cmc.get('traceable', True)
addStubMember(iface.name + '.' + member.name, member,
traceable)
traceable and mayTrace)
if member.iface not in stubbedInterfaces:
stubbedInterfaces.append(member.iface)
else:
@ -342,13 +346,10 @@ def readConfigFile(filename, includePath, cachedir, traceable):
if member in iface.stubMembers:
raise UserError("Member %s is specified more than once."
% memberId)
mayTrace = True
if member.noscript:
cmc = conf.customMethodCalls.get(interfaceName + "_" + header.methodNativeName(member), None)
if cmc is not None and cmc.get('skipgen', False):
# We're doing magic custom stuff for this, so pretend it's not noscript
member.noscript = False
mayTrace = False
cmc = conf.customMethodCalls.get(interfaceName + "_" + header.methodNativeName(member), None)
mayTrace = cmc is None or cmc.get('traceable', True)
addStubMember(memberId, member, traceable and mayTrace)
if member.iface not in stubbedInterfaces:
stubbedInterfaces.append(member.iface)