b=569943; validate Enable/Disable args; r=vladimir

This commit is contained in:
Benoit Jacob 2010-06-08 14:45:23 -04:00
parent 00204343fd
commit ccaca6a20d
3 changed files with 44 additions and 8 deletions

View File

@ -299,6 +299,7 @@ protected:
PRBool SafeToCreateCanvas3DContext(nsHTMLCanvasElement *canvasElement);
PRBool ValidateGL();
PRBool ValidateBuffers(PRUint32 count);
static PRBool ValidateCapabilityEnum(WebGLenum cap);
void Invalidate();

View File

@ -760,9 +760,6 @@ GL_SAME_METHOD_2(DepthRangef, DepthRange, float, float)
GL_SAME_METHOD_2(DepthRange, DepthRange, float, float)
#endif
// XXX arg check!
GL_SAME_METHOD_1(Disable, Disable, WebGLenum)
NS_IMETHODIMP
WebGLContext::DisableVertexAttribArray(WebGLuint index)
{
@ -884,8 +881,25 @@ WebGLContext::DrawElements(WebGLenum mode, WebGLuint count, WebGLenum type, WebG
return NS_OK;
}
// XXX definitely need to validate this
GL_SAME_METHOD_1(Enable, Enable, PRUint32)
NS_IMETHODIMP WebGLContext::Enable(WebGLenum cap)
{
if (!ValidateCapabilityEnum(cap))
return ErrorInvalidEnum("Enable: invalid capability enum");
MakeContextCurrent();
gl->fEnable(cap);
return NS_OK;
}
NS_IMETHODIMP WebGLContext::Disable(WebGLenum cap)
{
if (!ValidateCapabilityEnum(cap))
return ErrorInvalidEnum("Disable: invalid capability enum");
MakeContextCurrent();
gl->fDisable(cap);
return NS_OK;
}
NS_IMETHODIMP
WebGLContext::EnableVertexAttribArray(WebGLuint index)
@ -1939,14 +1953,18 @@ WebGLContext::IsTexture(nsIWebGLTexture *tobj, WebGLboolean *retval)
}
NS_IMETHODIMP
WebGLContext::IsEnabled(WebGLenum k, WebGLboolean *retval)
WebGLContext::IsEnabled(WebGLenum cap, WebGLboolean *retval)
{
if(!ValidateCapabilityEnum(cap)) {
*retval = 0; // as per the OpenGL ES spec
return ErrorInvalidEnum("IsEnabled: invalid capability enum");
}
MakeContextCurrent();
*retval = gl->fIsEnabled(k);
*retval = gl->fIsEnabled(cap);
return NS_OK;
}
GL_SAME_METHOD_1(LineWidth, LineWidth, float)
NS_IMETHODIMP

View File

@ -103,3 +103,20 @@ WebGLContext::ValidateBuffers(PRUint32 count)
return PR_TRUE;
}
PRBool WebGLContext::ValidateCapabilityEnum(WebGLenum cap)
{
switch (cap) {
case LOCAL_GL_BLEND:
case LOCAL_GL_CULL_FACE:
case LOCAL_GL_DEPTH_TEST:
case LOCAL_GL_DITHER:
case LOCAL_GL_POLYGON_OFFSET_FILL:
case LOCAL_GL_SAMPLE_ALPHA_TO_COVERAGE:
case LOCAL_GL_SAMPLE_COVERAGE:
case LOCAL_GL_SCISSOR_TEST:
case LOCAL_GL_STENCIL_TEST:
return PR_TRUE;
default:
return PR_FALSE;
}
}