Refactor validation of FramebufferRenderbuffer.
Consolidate a lot of duplicated code into helper methods. Also
move GetTargetTexture to the context class.
Change-Id: I8e3990a5e3c1976cb533941d0a0946466accec30
Reviewed-on: https://chromium-review.googlesource.com/181556
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index e3188dd..379dc82 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -27,6 +27,7 @@
#include "libGLESv2/renderer/Renderer.h"
#include "libGLESv2/VertexArray.h"
#include "libGLESv2/Sampler.h"
+#include "libGLESv2/validationES.h"
#include "libEGL/Surface.h"
@@ -1388,9 +1389,9 @@
renderbufferObject->setStorage(renderbuffer);
}
-Framebuffer *Context::getFramebuffer(unsigned int handle)
+Framebuffer *Context::getFramebuffer(unsigned int handle) const
{
- FramebufferMap::iterator framebuffer = mFramebufferMap.find(handle);
+ FramebufferMap::const_iterator framebuffer = mFramebufferMap.find(handle);
if (framebuffer == mFramebufferMap.end())
{
@@ -1450,22 +1451,62 @@
return mCurrentProgramBinary.get();
}
-Texture2D *Context::getTexture2D()
+Texture *Context::getTargetTexture(GLenum target) const
+{
+ if (!ValidTextureTarget(this, target))
+ {
+ return NULL;
+ }
+
+ switch (target)
+ {
+ case GL_TEXTURE_2D: return getTexture2D();
+ case GL_TEXTURE_CUBE_MAP: return getTextureCubeMap();
+ case GL_TEXTURE_3D: return getTexture3D();
+ case GL_TEXTURE_2D_ARRAY: return getTexture2DArray();
+ default: return NULL;
+ }
+}
+
+GLuint Context::getTargetFramebufferHandle(GLenum target) const
+{
+ if (!ValidFramebufferTarget(target))
+ {
+ return GL_INVALID_INDEX;
+ }
+
+ if (target == GL_READ_FRAMEBUFFER_ANGLE)
+ {
+ return mState.readFramebuffer;
+ }
+ else
+ {
+ return mState.drawFramebuffer;
+ }
+}
+
+Framebuffer *Context::getTargetFramebuffer(GLenum target) const
+{
+ GLuint framebufferHandle = getTargetFramebufferHandle(target);
+ return (framebufferHandle == GL_INVALID_INDEX ? NULL : getFramebuffer(framebufferHandle));
+}
+
+Texture2D *Context::getTexture2D() const
{
return static_cast<Texture2D*>(getSamplerTexture(mState.activeSampler, TEXTURE_2D));
}
-TextureCubeMap *Context::getTextureCubeMap()
+TextureCubeMap *Context::getTextureCubeMap() const
{
return static_cast<TextureCubeMap*>(getSamplerTexture(mState.activeSampler, TEXTURE_CUBE));
}
-Texture3D *Context::getTexture3D()
+Texture3D *Context::getTexture3D() const
{
return static_cast<Texture3D*>(getSamplerTexture(mState.activeSampler, TEXTURE_3D));
}
-Texture2DArray *Context::getTexture2DArray()
+Texture2DArray *Context::getTexture2DArray() const
{
return static_cast<Texture2DArray*>(getSamplerTexture(mState.activeSampler, TEXTURE_2D_ARRAY));
}
@@ -1500,7 +1541,7 @@
return mState.unpack.pixelBuffer.get();
}
-Texture *Context::getSamplerTexture(unsigned int sampler, TextureType type)
+Texture *Context::getSamplerTexture(unsigned int sampler, TextureType type) const
{
GLuint texid = mState.samplerTexture[type][sampler].id();