diff --git a/src/OpenGL/libGLESv2/Context.cpp b/src/OpenGL/libGLESv2/Context.cpp
index cdeabbd..15129d7 100644
--- a/src/OpenGL/libGLESv2/Context.cpp
+++ b/src/OpenGL/libGLESv2/Context.cpp
@@ -769,20 +769,6 @@
 	}
 }
 
-GLuint Context::getReadFramebufferColorIndex() const
-{
-	GLenum buf = getReadFramebuffer()->getReadBuffer();
-	switch(buf)
-	{
-	case GL_BACK:
-		return 0;
-	case GL_NONE:
-		return GL_INVALID_INDEX;
-	default:
-		return buf - GL_COLOR_ATTACHMENT0;
-}
-}
-
 GLuint Context::getArrayBufferName() const
 {
 	return mState.arrayBuffer.name();
@@ -4118,7 +4104,7 @@
 
 	if(mask & GL_COLOR_BUFFER_BIT)
 	{
-		GLenum readColorbufferType = readFramebuffer->getColorbufferType(getReadFramebufferColorIndex());
+		GLenum readColorbufferType = readFramebuffer->getReadBufferType();
 		GLenum drawColorbufferType = drawFramebuffer->getColorbufferType(0);
 		const bool validReadType = readColorbufferType == GL_TEXTURE_2D || Framebuffer::IsRenderbuffer(readColorbufferType);
 		const bool validDrawType = drawColorbufferType == GL_TEXTURE_2D || Framebuffer::IsRenderbuffer(drawColorbufferType);
diff --git a/src/OpenGL/libGLESv2/Context.h b/src/OpenGL/libGLESv2/Context.h
index 1b1f807..27147a5 100644
--- a/src/OpenGL/libGLESv2/Context.h
+++ b/src/OpenGL/libGLESv2/Context.h
@@ -515,7 +515,6 @@
 
 	void setFramebufferReadBuffer(GLenum buf);
 	void setFramebufferDrawBuffers(GLsizei n, const GLenum *bufs);
-	GLuint getReadFramebufferColorIndex() const;
 
 	GLuint getActiveQuery(GLenum target) const;
 
diff --git a/src/OpenGL/libGLESv2/Framebuffer.cpp b/src/OpenGL/libGLESv2/Framebuffer.cpp
index 9b9c78b..c02725e 100644
--- a/src/OpenGL/libGLESv2/Framebuffer.cpp
+++ b/src/OpenGL/libGLESv2/Framebuffer.cpp
@@ -169,11 +169,14 @@
 // caller must Release() the returned surface
 egl::Image *Framebuffer::getRenderTarget(GLuint index)
 {
-	Renderbuffer *colorbuffer = mColorbufferPointer[index];
-
-	if(colorbuffer)
+	if(index < MAX_COLOR_ATTACHMENTS)
 	{
-		return colorbuffer->getRenderTarget();
+		Renderbuffer *colorbuffer = mColorbufferPointer[index];
+
+		if(colorbuffer)
+		{
+			return colorbuffer->getRenderTarget();
+		}
 	}
 
 	return nullptr;
@@ -181,8 +184,7 @@
 
 egl::Image *Framebuffer::getReadRenderTarget()
 {
-	Context *context = getContext();
-	return getRenderTarget(context->getReadFramebufferColorIndex());
+	return getRenderTarget(getReadBufferIndex());
 }
 
 // Increments refcount on surface.
@@ -220,8 +222,7 @@
 
 Renderbuffer *Framebuffer::getReadColorbuffer() const
 {
-	Context *context = getContext();
-	return getColorbuffer(context->getReadFramebufferColorIndex());
+	return getColorbuffer(getReadBufferIndex());
 }
 
 Renderbuffer *Framebuffer::getDepthbuffer() const
@@ -234,6 +235,16 @@
 	return mStencilbufferPointer;
 }
 
+GLenum Framebuffer::getReadBufferType()
+{
+	if(readBuffer == GL_NONE)
+	{
+		return GL_NONE;
+	}
+
+	return mColorbufferType[getReadBufferIndex()];
+}
+
 GLenum Framebuffer::getColorbufferType(GLuint index)
 {
 	return mColorbufferType[index];
@@ -654,6 +665,19 @@
 	return GL_NONE;
 }
 
+GLuint Framebuffer::getReadBufferIndex() const
+{
+	switch(readBuffer)
+	{
+	case GL_BACK:
+		return 0;
+	case GL_NONE:
+		return GL_INVALID_INDEX;
+	default:
+		return readBuffer - GL_COLOR_ATTACHMENT0;
+	}
+}
+
 DefaultFramebuffer::DefaultFramebuffer(Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil)
 {
 	GLenum defaultRenderbufferType = egl::getClientVersion() < 3 ? GL_RENDERBUFFER : GL_FRAMEBUFFER_DEFAULT;
diff --git a/src/OpenGL/libGLESv2/Framebuffer.h b/src/OpenGL/libGLESv2/Framebuffer.h
index 1405031..8f1251d 100644
--- a/src/OpenGL/libGLESv2/Framebuffer.h
+++ b/src/OpenGL/libGLESv2/Framebuffer.h
@@ -61,6 +61,7 @@
 	Renderbuffer *getDepthbuffer() const;
 	Renderbuffer *getStencilbuffer() const;
 
+	GLenum getReadBufferType();
 	GLenum getColorbufferType(GLuint index);
 	GLenum getDepthbufferType();
 	GLenum getStencilbufferType();
@@ -88,11 +89,14 @@
 	static bool IsRenderbuffer(GLenum type);
 
 protected:
-	GLenum mColorbufferType[MAX_COLOR_ATTACHMENTS];
-	gl::BindingPointer<Renderbuffer> mColorbufferPointer[MAX_COLOR_ATTACHMENTS];
+	GLuint getReadBufferIndex() const;
+
 	GLenum readBuffer;
 	GLenum drawBuffer[MAX_COLOR_ATTACHMENTS];
 
+	GLenum mColorbufferType[MAX_COLOR_ATTACHMENTS];
+	gl::BindingPointer<Renderbuffer> mColorbufferPointer[MAX_COLOR_ATTACHMENTS];
+
 	GLenum mDepthbufferType;
 	gl::BindingPointer<Renderbuffer> mDepthbufferPointer;
 
