mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 636002 - better messages about attrib index validation - r=jrmuizel, a=joe
This commit is contained in:
parent
16d3658b63
commit
84ea51cd32
@ -440,6 +440,7 @@ protected:
|
|||||||
PRBool ValidateTexFormatAndType(WebGLenum format, WebGLenum type,
|
PRBool ValidateTexFormatAndType(WebGLenum format, WebGLenum type,
|
||||||
PRUint32 *texelSize, const char *info);
|
PRUint32 *texelSize, const char *info);
|
||||||
PRBool ValidateDrawModeEnum(WebGLenum mode, const char *info);
|
PRBool ValidateDrawModeEnum(WebGLenum mode, const char *info);
|
||||||
|
PRBool ValidateAttribIndex(WebGLuint index, const char *info);
|
||||||
|
|
||||||
void Invalidate();
|
void Invalidate();
|
||||||
void DestroyResourcesAndContext();
|
void DestroyResourcesAndContext();
|
||||||
|
@ -183,6 +183,9 @@ WebGLContext::BindAttribLocation(nsIWebGLProgram *pobj, WebGLuint location, cons
|
|||||||
if (name.IsEmpty())
|
if (name.IsEmpty())
|
||||||
return ErrorInvalidValue("BindAttribLocation: name can't be null or empty");
|
return ErrorInvalidValue("BindAttribLocation: name can't be null or empty");
|
||||||
|
|
||||||
|
if (!ValidateAttribIndex(location, "bindAttribLocation"))
|
||||||
|
return NS_OK;
|
||||||
|
|
||||||
MakeContextCurrent();
|
MakeContextCurrent();
|
||||||
|
|
||||||
gl->fBindAttribLocation(progname, location, NS_LossyConvertUTF16toASCII(name).get());
|
gl->fBindAttribLocation(progname, location, NS_LossyConvertUTF16toASCII(name).get());
|
||||||
@ -1087,8 +1090,8 @@ WebGLContext::DepthRange(WebGLfloat zNear, WebGLfloat zFar)
|
|||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
WebGLContext::DisableVertexAttribArray(WebGLuint index)
|
WebGLContext::DisableVertexAttribArray(WebGLuint index)
|
||||||
{
|
{
|
||||||
if (index > mAttribBuffers.Length())
|
if (!ValidateAttribIndex(index, "disableVertexAttribArray"))
|
||||||
return ErrorInvalidValue("DisableVertexAttribArray: index out of range");
|
return NS_OK;
|
||||||
|
|
||||||
MakeContextCurrent();
|
MakeContextCurrent();
|
||||||
|
|
||||||
@ -1452,8 +1455,8 @@ NS_IMETHODIMP WebGLContext::Disable(WebGLenum cap)
|
|||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
WebGLContext::EnableVertexAttribArray(WebGLuint index)
|
WebGLContext::EnableVertexAttribArray(WebGLuint index)
|
||||||
{
|
{
|
||||||
if (index > mAttribBuffers.Length())
|
if (!ValidateAttribIndex(index, "enableVertexAttribArray"))
|
||||||
return ErrorInvalidValue("EnableVertexAttribArray: index out of range");
|
return NS_OK;
|
||||||
|
|
||||||
MakeContextCurrent();
|
MakeContextCurrent();
|
||||||
|
|
||||||
@ -2512,8 +2515,8 @@ WebGLContext::GetVertexAttrib(WebGLuint index, WebGLenum pname, nsIVariant **ret
|
|||||||
{
|
{
|
||||||
*retval = nsnull;
|
*retval = nsnull;
|
||||||
|
|
||||||
if (index >= mAttribBuffers.Length())
|
if (!ValidateAttribIndex(index, "getVertexAttrib"))
|
||||||
return ErrorInvalidValue("getVertexAttrib: invalid index");
|
return NS_OK;
|
||||||
|
|
||||||
nsCOMPtr<nsIWritableVariant> wrval = do_CreateInstance("@mozilla.org/variant;1");
|
nsCOMPtr<nsIWritableVariant> wrval = do_CreateInstance("@mozilla.org/variant;1");
|
||||||
NS_ENSURE_TRUE(wrval, NS_ERROR_FAILURE);
|
NS_ENSURE_TRUE(wrval, NS_ERROR_FAILURE);
|
||||||
@ -2579,8 +2582,8 @@ WebGLContext::GetVertexAttribOffset(WebGLuint index, WebGLenum pname, WebGLuint
|
|||||||
{
|
{
|
||||||
*retval = 0;
|
*retval = 0;
|
||||||
|
|
||||||
if (index >= mAttribBuffers.Length())
|
if (!ValidateAttribIndex(index, "getVertexAttribOffset"))
|
||||||
return ErrorInvalidValue("getVertexAttribOffset: invalid index");
|
return NS_OK;
|
||||||
|
|
||||||
if (pname != LOCAL_GL_VERTEX_ATTRIB_ARRAY_POINTER)
|
if (pname != LOCAL_GL_VERTEX_ATTRIB_ARRAY_POINTER)
|
||||||
return ErrorInvalidEnum("getVertexAttribOffset: bad parameter");
|
return ErrorInvalidEnum("getVertexAttribOffset: bad parameter");
|
||||||
@ -3873,8 +3876,8 @@ WebGLContext::VertexAttribPointer(WebGLuint index, WebGLint size, WebGLenum type
|
|||||||
// requiredAlignment should always be a power of two.
|
// requiredAlignment should always be a power of two.
|
||||||
WebGLsizei requiredAlignmentMask = requiredAlignment - 1;
|
WebGLsizei requiredAlignmentMask = requiredAlignment - 1;
|
||||||
|
|
||||||
if (index >= mAttribBuffers.Length())
|
if (!ValidateAttribIndex(index, "vertexAttribPointer"))
|
||||||
return ErrorInvalidValue("VertexAttribPointer: index out of range - %d >= %d", index, mAttribBuffers.Length());
|
return NS_OK;
|
||||||
|
|
||||||
if (size < 1 || size > 4)
|
if (size < 1 || size > 4)
|
||||||
return ErrorInvalidValue("VertexAttribPointer: invalid element size");
|
return ErrorInvalidValue("VertexAttribPointer: invalid element size");
|
||||||
|
@ -376,6 +376,22 @@ PRBool WebGLContext::ValidateTexFormatAndType(WebGLenum format, WebGLenum type,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PRBool WebGLContext::ValidateAttribIndex(WebGLuint index, const char *info)
|
||||||
|
{
|
||||||
|
if (index > mAttribBuffers.Length()) {
|
||||||
|
if (index == WebGLuint(-1)) {
|
||||||
|
ErrorInvalidValue("%s: index -1 is invalid. That probably comes from a getAttribLication() call, "
|
||||||
|
"where this return value -1 means that the passed name didn't correspond to an active attribute in "
|
||||||
|
"the specified program.", info);
|
||||||
|
} else {
|
||||||
|
ErrorInvalidValue("%s: index %d is out of range", info, index);
|
||||||
|
}
|
||||||
|
return PR_FALSE;
|
||||||
|
} else {
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
PRBool
|
PRBool
|
||||||
WebGLContext::InitAndValidateGL()
|
WebGLContext::InitAndValidateGL()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user