Bug 1318507 - Update sampler entrypoints to be non-nullable, and drop trivial WebGLContextUnchecked usages. - r=ethlin
MozReview-Commit-ID: 2dWKDFbAK6a
--- a/dom/canvas/WebGL2ContextSamplers.cpp
+++ b/dom/canvas/WebGL2ContextSamplers.cpp
@@ -75,163 +75,91 @@ WebGL2Context::BindSampler(GLuint unit,
return;
if (GLint(unit) >= mGLMaxTextureUnits)
return ErrorInvalidValue("bindSampler: unit must be < %d", mGLMaxTextureUnits);
if (sampler && sampler->IsDeleted())
return ErrorInvalidOperation("bindSampler: binding deleted sampler");
- WebGLContextUnchecked::BindSampler(unit, sampler);
+ ////
+
+ gl->MakeCurrent();
+ gl->fBindSampler(unit, sampler ? sampler->mGLName : 0);
+
InvalidateResolveCacheForTextureWithTexUnit(unit);
-
mBoundSamplers[unit] = sampler;
}
void
-WebGL2Context::SamplerParameteri(WebGLSampler* sampler, GLenum pname, GLint param)
+WebGL2Context::SamplerParameteri(WebGLSampler& sampler, GLenum pname, GLint paramInt)
{
- if (IsContextLost())
- return;
-
- if (!sampler || sampler->IsDeleted())
- return ErrorInvalidOperation("samplerParameteri: invalid sampler");
-
- if (!ValidateSamplerParameterParams(pname, WebGLIntOrFloat(param), "samplerParameteri"))
- return;
-
- sampler->SamplerParameter1i(pname, param);
- WebGLContextUnchecked::SamplerParameteri(sampler, pname, param);
-}
-
-void
-WebGL2Context::SamplerParameteriv(WebGLSampler* sampler, GLenum pname, const dom::Int32Array& param)
-{
+ const char funcName[] = "samplerParameteri";
if (IsContextLost())
return;
- if (!sampler || sampler->IsDeleted())
- return ErrorInvalidOperation("samplerParameteriv: invalid sampler");
-
- param.ComputeLengthAndData();
- if (param.Length() < 1)
- return /* TODO(djg): Error message */;
-
- /* TODO(djg): All of these calls in ES3 only take 1 param */
- if (!ValidateSamplerParameterParams(pname, WebGLIntOrFloat(param.Data()[0]), "samplerParameteriv"))
+ if (!ValidateObjectRef(funcName, sampler))
return;
- sampler->SamplerParameter1i(pname, param.Data()[0]);
- WebGLContextUnchecked::SamplerParameteriv(sampler, pname, param.Data());
-}
-
-void
-WebGL2Context::SamplerParameteriv(WebGLSampler* sampler, GLenum pname, const dom::Sequence<GLint>& param)
-{
- if (IsContextLost())
- return;
-
- if (!sampler || sampler->IsDeleted())
- return ErrorInvalidOperation("samplerParameteriv: invalid sampler");
-
- if (param.Length() < 1)
- return /* TODO(djg): Error message */;
-
- /* TODO(djg): All of these calls in ES3 only take 1 param */
- if (!ValidateSamplerParameterParams(pname, WebGLIntOrFloat(param[0]), "samplerParameteriv"))
- return;
-
- sampler->SamplerParameter1i(pname, param[0]);
- WebGLContextUnchecked::SamplerParameteriv(sampler, pname, param.Elements());
+ sampler.SamplerParameter(funcName, pname, paramInt);
}
void
-WebGL2Context::SamplerParameterf(WebGLSampler* sampler, GLenum pname, GLfloat param)
+WebGL2Context::SamplerParameterf(WebGLSampler& sampler, GLenum pname, GLfloat paramFloat)
{
- if (IsContextLost())
- return;
-
- if (!sampler || sampler->IsDeleted())
- return ErrorInvalidOperation("samplerParameterf: invalid sampler");
-
- if (!ValidateSamplerParameterParams(pname, WebGLIntOrFloat(param), "samplerParameterf"))
- return;
-
- sampler->SamplerParameter1f(pname, param);
- WebGLContextUnchecked::SamplerParameterf(sampler, pname, param);
-}
-
-void
-WebGL2Context::SamplerParameterfv(WebGLSampler* sampler, GLenum pname, const dom::Float32Array& param)
-{
+ const char funcName[] = "samplerParameterf";
if (IsContextLost())
return;
- if (!sampler || sampler->IsDeleted())
- return ErrorInvalidOperation("samplerParameterfv: invalid sampler");
-
- param.ComputeLengthAndData();
- if (param.Length() < 1)
- return /* TODO(djg): Error message */;
-
- /* TODO(djg): All of these calls in ES3 only take 1 param */
- if (!ValidateSamplerParameterParams(pname, WebGLIntOrFloat(param.Data()[0]), "samplerParameterfv"))
+ if (!ValidateObjectRef(funcName, sampler))
return;
- sampler->SamplerParameter1f(pname, param.Data()[0]);
- WebGLContextUnchecked::SamplerParameterfv(sampler, pname, param.Data());
+ sampler.SamplerParameter(funcName, pname, WebGLIntOrFloat(paramFloat).AsInt());
}
void
-WebGL2Context::SamplerParameterfv(WebGLSampler* sampler, GLenum pname, const dom::Sequence<GLfloat>& param)
+WebGL2Context::GetSamplerParameter(JSContext*, const WebGLSampler& sampler, GLenum pname,
+ JS::MutableHandleValue retval)
{
- if (IsContextLost())
- return;
-
- if (!sampler || sampler->IsDeleted())
- return ErrorInvalidOperation("samplerParameterfv: invalid sampler");
-
- if (param.Length() < 1)
- return /* TODO(djg): Error message */;
-
- /* TODO(djg): All of these calls in ES3 only take 1 param */
- if (!ValidateSamplerParameterParams(pname, WebGLIntOrFloat(param[0]), "samplerParameterfv"))
- return;
-
- sampler->SamplerParameter1f(pname, param[0]);
- WebGLContextUnchecked::SamplerParameterfv(sampler, pname, param.Elements());
-}
-
-void
-WebGL2Context::GetSamplerParameter(JSContext*, WebGLSampler* sampler, GLenum pname, JS::MutableHandleValue retval)
-{
+ const char funcName[] = "getSamplerParameter";
retval.setNull();
if (IsContextLost())
return;
- if (!sampler || sampler->IsDeleted())
- return ErrorInvalidOperation("getSamplerParameter: invalid sampler");
+ if (!ValidateObjectRef(funcName, sampler))
+ return;
- if (!ValidateSamplerParameterName(pname, "getSamplerParameter"))
- return;
+ ////
+
+ gl->MakeCurrent();
switch (pname) {
case LOCAL_GL_TEXTURE_MIN_FILTER:
case LOCAL_GL_TEXTURE_MAG_FILTER:
case LOCAL_GL_TEXTURE_WRAP_S:
case LOCAL_GL_TEXTURE_WRAP_T:
case LOCAL_GL_TEXTURE_WRAP_R:
case LOCAL_GL_TEXTURE_COMPARE_MODE:
case LOCAL_GL_TEXTURE_COMPARE_FUNC:
- retval.set(JS::Int32Value(
- WebGLContextUnchecked::GetSamplerParameteriv(sampler, pname)));
+ {
+ GLint param = 0;
+ gl->fGetSamplerParameteriv(sampler.mGLName, pname, ¶m);
+ retval.set(JS::Int32Value(param));
+ }
return;
case LOCAL_GL_TEXTURE_MIN_LOD:
case LOCAL_GL_TEXTURE_MAX_LOD:
- retval.set(JS::Float32Value(
- WebGLContextUnchecked::GetSamplerParameterfv(sampler, pname)));
+ {
+ GLfloat param = 0;
+ gl->fGetSamplerParameterfv(sampler.mGLName, pname, ¶m);
+ retval.set(JS::Float32Value(param));
+ }
+ return;
+
+ default:
+ ErrorInvalidEnum("%s: invalid pname: %s", funcName, EnumName(pname));
return;
}
}
} // namespace mozilla
--- a/dom/canvas/WebGLContextUnchecked.cpp
+++ b/dom/canvas/WebGLContextUnchecked.cpp
@@ -11,84 +11,9 @@
namespace mozilla {
WebGLContextUnchecked::WebGLContextUnchecked(gl::GLContext* _gl)
: mGL_OnlyClearInDestroyResourcesAndContext(_gl)
, gl(mGL_OnlyClearInDestroyResourcesAndContext) // const reference
{ }
-// -----------------------------------------------------------------------------
-// Sampler Objects
-
-void
-WebGLContextUnchecked::BindSampler(GLuint unit, WebGLSampler* sampler)
-{
- gl->MakeCurrent();
- gl->fBindSampler(unit, sampler ? sampler->mGLName : 0);
-}
-
-GLint
-WebGLContextUnchecked::GetSamplerParameteriv(WebGLSampler* sampler,
- GLenum pname)
-{
- MOZ_ASSERT(sampler, "Did you validate?");
-
- GLint param = 0;
- gl->MakeCurrent();
- gl->fGetSamplerParameteriv(sampler->mGLName, pname, ¶m);
-
- return param;
-}
-
-GLfloat
-WebGLContextUnchecked::GetSamplerParameterfv(WebGLSampler* sampler,
- GLenum pname)
-{
- MOZ_ASSERT(sampler, "Did you validate?");
-
- GLfloat param = 0.0f;
- gl->MakeCurrent();
- gl->fGetSamplerParameterfv(sampler->mGLName, pname, ¶m);
- return param;
-}
-
-void
-WebGLContextUnchecked::SamplerParameteri(WebGLSampler* sampler,
- GLenum pname,
- GLint param)
-{
- MOZ_ASSERT(sampler, "Did you validate?");
- gl->MakeCurrent();
- gl->fSamplerParameteri(sampler->mGLName, pname, param);
-}
-
-void
-WebGLContextUnchecked::SamplerParameteriv(WebGLSampler* sampler,
- GLenum pname,
- const GLint* param)
-{
- MOZ_ASSERT(sampler, "Did you validate?");
- gl->MakeCurrent();
- gl->fSamplerParameteriv(sampler->mGLName, pname, param);
-}
-
-void
-WebGLContextUnchecked::SamplerParameterf(WebGLSampler* sampler,
- GLenum pname,
- GLfloat param)
-{
- MOZ_ASSERT(sampler, "Did you validate?");
- gl->MakeCurrent();
- gl->fSamplerParameterf(sampler->mGLName, pname, param);
-}
-
-void
-WebGLContextUnchecked::SamplerParameterfv(WebGLSampler* sampler,
- GLenum pname,
- const GLfloat* param)
-{
- MOZ_ASSERT(sampler, "Did you validate?");
- gl->MakeCurrent();
- gl->fSamplerParameterfv(sampler->mGLName, pname, param);
-}
-
} // namespace mozilla
--- a/dom/canvas/WebGLContextUnchecked.h
+++ b/dom/canvas/WebGLContextUnchecked.h
@@ -15,28 +15,16 @@ namespace mozilla {
class WebGLBuffer;
class WebGLSampler;
class WebGLContextUnchecked
{
public:
explicit WebGLContextUnchecked(gl::GLContext* gl);
- // -------------------------------------------------------------------------
- // Sampler Objects
- void BindSampler(GLuint unit, WebGLSampler* sampler);
-
- GLint GetSamplerParameteriv(WebGLSampler* sampler, GLenum pname);
- GLfloat GetSamplerParameterfv(WebGLSampler* sampler, GLenum pname);
-
- void SamplerParameteri(WebGLSampler* sampler, GLenum pname, GLint param);
- void SamplerParameteriv(WebGLSampler* sampler, GLenum pname, const GLint* param);
- void SamplerParameterf(WebGLSampler* sampler, GLenum pname, GLfloat param);
- void SamplerParameterfv(WebGLSampler* sampler, GLenum pname, const GLfloat* param);
-
protected:
// We've had issues in the past with nulling `gl` without actually releasing
// all of our resources. This construction ensures that we are aware that we
// should only null `gl` in DestroyResourcesAndContext.
RefPtr<gl::GLContext> mGL_OnlyClearInDestroyResourcesAndContext;
public:
// Grab a const reference so we can see changes, but can't make changes.
const decltype(mGL_OnlyClearInDestroyResourcesAndContext)& gl;