}\r
}\r
break;\r
- case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES: *params = IMPLEMENTATION_COLOR_READ_TYPE; break;\r
- case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES: *params = IMPLEMENTATION_COLOR_READ_FORMAT; break;\r
+ case GL_IMPLEMENTATION_COLOR_READ_TYPE:\r
+ {\r
+ Framebuffer *framebuffer = getFramebuffer();\r
+ *params = framebuffer->getImplementationColorReadType();\r
+ }\r
+ break;\r
+ case GL_IMPLEMENTATION_COLOR_READ_FORMAT:\r
+ {\r
+ Framebuffer *framebuffer = getFramebuffer();\r
+ *params = framebuffer->getImplementationColorReadFormat();\r
+ }\r
+ break;\r
case GL_MAX_VIEWPORT_DIMS:\r
{\r
int maxDimension = IMPLEMENTATION_MAX_RENDERBUFFER_SIZE;\r
return error(GL_INVALID_OPERATION);\r
}\r
\r
+ if(format != GL_RGBA || type != GL_UNSIGNED_BYTE)\r
+ {\r
+ if(format != framebuffer->getImplementationColorReadFormat() || type != framebuffer->getImplementationColorReadType())\r
+ {\r
+ return error(GL_INVALID_OPERATION);\r
+ }\r
+ }\r
+\r
GLsizei outputPitch = ComputePitch(width, format, type, mState.packAlignment);\r
\r
// Sized query sanity check\r
default: UNREACHABLE();\r
}\r
break;\r
- case GL_RGB: // IMPLEMENTATION_COLOR_READ_FORMAT\r
+ case GL_RGB:\r
switch(type)\r
{\r
- case GL_UNSIGNED_SHORT_5_6_5: // IMPLEMENTATION_COLOR_READ_TYPE\r
+ case GL_UNSIGNED_SHORT_5_6_5:\r
dest16[i + j * outputPitch / sizeof(unsigned short)] =\r
((unsigned short)(31 * b + 0.5f) << 0) |\r
((unsigned short)(63 * g + 0.5f) << 5) |\r
MAX_MODELVIEW_STACK_DEPTH = 32,\r
MAX_PROJECTION_STACK_DEPTH = 2,\r
MAX_TEXTURE_STACK_DEPTH = 2,\r
-\r
- IMPLEMENTATION_COLOR_READ_FORMAT = GL_RGB,\r
- IMPLEMENTATION_COLOR_READ_TYPE = GL_UNSIGNED_SHORT_5_6_5\r
};\r
\r
const GLenum compressedTextureFormats[] =\r
return GL_FRAMEBUFFER_COMPLETE_OES;
}
+GLenum Framebuffer::getImplementationColorReadFormat()
+{
+ return GL_RGB;
+}
+
+GLenum Framebuffer::getImplementationColorReadType()
+{
+ return GL_UNSIGNED_SHORT_5_6_5;
+}
+
DefaultFramebuffer::DefaultFramebuffer(Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil)
{
mColorbufferPointer.set(new Renderbuffer(0, colorbuffer));
virtual GLenum completeness();\r
GLenum completeness(int &width, int &height, int &samples);\r
\r
+ GLenum getImplementationColorReadFormat();\r
+ GLenum getImplementationColorReadType();\r
+\r
protected:\r
GLenum mColorbufferType;\r
gl::BindingPointer<Renderbuffer> mColorbufferPointer;\r
return true;\r
}\r
\r
-// Check for combinations of format and type that are valid for ReadPixels\r
-static bool validReadFormatType(GLenum format, GLenum type)\r
-{\r
- switch(format)\r
- {\r
- case GL_RGBA:\r
- switch (type)\r
- {\r
- case GL_UNSIGNED_BYTE:\r
- break;\r
- default:\r
- return false;\r
- }\r
- break;\r
- case GL_BGRA_EXT:\r
- switch (type)\r
- {\r
- case GL_UNSIGNED_BYTE:\r
- case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:\r
- case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT:\r
- break;\r
- default:\r
- return false;\r
- }\r
- break;\r
- case es1::IMPLEMENTATION_COLOR_READ_FORMAT:\r
- switch (type)\r
- {\r
- case es1::IMPLEMENTATION_COLOR_READ_TYPE:\r
- break;\r
- default:\r
- return false;\r
- }\r
- break;\r
- default:\r
- return false;\r
- }\r
-\r
- return true;\r
-}\r
-\r
extern "C"\r
{\r
\r
}\r
\r
void GL_APIENTRY glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)\r
-{
- size = static_cast<GLint>(size); // Work around issues with some 64-bit applications
+{\r
+ size = static_cast<GLint>(size); // Work around issues with some 64-bit applications\r
\r
TRACE("(GLenum target = 0x%X, GLsizeiptr size = %d, const GLvoid* data = 0x%0.8p, GLenum usage = %d)",\r
target, size, data, usage);\r
}\r
\r
void GL_APIENTRY glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)\r
-{
- size = static_cast<GLint>(size); // Work around issues with some 64-bit applications
- offset = static_cast<GLint>(offset);
+{\r
+ size = static_cast<GLint>(size); // Work around issues with some 64-bit applications\r
+ offset = static_cast<GLint>(offset);\r
\r
TRACE("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr size = %d, const GLvoid* data = 0x%0.8p)",\r
- target, offset, size, data);
+ target, offset, size, data);\r
\r
if(size < 0 || offset < 0)\r
{\r
{\r
return error(GL_INVALID_VALUE);\r
}\r
-\r
- if(!validReadFormatType(format, type))\r
- {\r
- return error(GL_INVALID_OPERATION);\r
- }\r
-\r
+ \r
es1::Context *context = es1::getContext();\r
\r
if(context)\r
}\r
}\r
break;\r
- case GL_IMPLEMENTATION_COLOR_READ_TYPE: *params = IMPLEMENTATION_COLOR_READ_TYPE; break;\r
- case GL_IMPLEMENTATION_COLOR_READ_FORMAT: *params = IMPLEMENTATION_COLOR_READ_FORMAT; break;\r
+ case GL_IMPLEMENTATION_COLOR_READ_TYPE:\r
+ {\r
+ Framebuffer *framebuffer = getReadFramebuffer();\r
+ *params = framebuffer->getImplementationColorReadType();\r
+ }\r
+ break;\r
+ case GL_IMPLEMENTATION_COLOR_READ_FORMAT:\r
+ {\r
+ Framebuffer *framebuffer = getReadFramebuffer();\r
+ *params = framebuffer->getImplementationColorReadFormat();\r
+ }\r
+ break;\r
case GL_MAX_VIEWPORT_DIMS:\r
{\r
int maxDimension = IMPLEMENTATION_MAX_RENDERBUFFER_SIZE;\r
return error(GL_INVALID_OPERATION);\r
}\r
\r
+ if(format != GL_RGBA || type != GL_UNSIGNED_BYTE)\r
+ {\r
+ if(format != framebuffer->getImplementationColorReadFormat() || type != framebuffer->getImplementationColorReadType())\r
+ {\r
+ return error(GL_INVALID_OPERATION);\r
+ }\r
+ }\r
+\r
GLsizei outputPitch = ComputePitch(width, format, type, mState.packAlignment);\r
\r
// Sized query sanity check\r
default: UNREACHABLE();\r
}\r
break;\r
- case GL_RGB: // IMPLEMENTATION_COLOR_READ_FORMAT\r
+ case GL_RGB:\r
switch(type)\r
{\r
- case GL_UNSIGNED_SHORT_5_6_5: // IMPLEMENTATION_COLOR_READ_TYPE\r
+ case GL_UNSIGNED_SHORT_5_6_5:\r
dest16[i + j * outputPitch / sizeof(unsigned short)] = \r
((unsigned short)(31 * b + 0.5f) << 0) |\r
((unsigned short)(63 * g + 0.5f) << 5) |\r
MAX_COMBINED_TEXTURE_IMAGE_UNITS = MAX_TEXTURE_IMAGE_UNITS + MAX_VERTEX_TEXTURE_IMAGE_UNITS,\r
MAX_FRAGMENT_UNIFORM_VECTORS = 224 - 3, // Reserve space for gl_DepthRange\r
MAX_DRAW_BUFFERS = 1,\r
-\r
- IMPLEMENTATION_COLOR_READ_FORMAT = GL_RGB,\r
- IMPLEMENTATION_COLOR_READ_TYPE = GL_UNSIGNED_SHORT_5_6_5\r
};\r
\r
const GLenum compressedTextureFormats[] =\r
return GL_FRAMEBUFFER_COMPLETE;
}
+GLenum Framebuffer::getImplementationColorReadFormat()\r
+{\r
+ return GL_RGB;\r
+}\r
+\r
+GLenum Framebuffer::getImplementationColorReadType()
+{
+ return GL_UNSIGNED_SHORT_5_6_5;
+}
+
DefaultFramebuffer::DefaultFramebuffer(Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil)
{
mColorbufferPointer.set(new Renderbuffer(0, colorbuffer));
virtual GLenum completeness();\r
GLenum completeness(int &width, int &height, int &samples);\r
\r
+ GLenum getImplementationColorReadFormat();\r
+ GLenum getImplementationColorReadType();\r
+\r
protected:\r
GLenum mColorbufferType;\r
gl::BindingPointer<Renderbuffer> mColorbufferPointer;\r
return true;\r
}\r
\r
-// Check for combinations of format and type that are valid for ReadPixels\r
-static bool validReadFormatType(GLenum format, GLenum type)\r
-{\r
- switch(format)\r
- {\r
- case GL_RGBA:\r
- switch(type)\r
- {\r
- case GL_UNSIGNED_BYTE:\r
- break;\r
- default:\r
- return false;\r
- }\r
- break;\r
- case GL_BGRA_EXT:\r
- switch(type)\r
- {\r
- case GL_UNSIGNED_BYTE:\r
- case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:\r
- case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT:\r
- break;\r
- default:\r
- return false;\r
- }\r
- break;\r
- case es2::IMPLEMENTATION_COLOR_READ_FORMAT:\r
- switch(type)\r
- {\r
- case es2::IMPLEMENTATION_COLOR_READ_TYPE:\r
- break;\r
- default:\r
- return false;\r
- }\r
- break;\r
- default:\r
- return false;\r
- }\r
-\r
- return true;\r
-}\r
-\r
extern "C"\r
{\r
\r
return error(GL_INVALID_VALUE);\r
}\r
\r
- if(!validReadFormatType(format, type))\r
- {\r
- return error(GL_INVALID_OPERATION);\r
- }\r
-\r
es2::Context *context = es2::getContext();\r
\r
if(context)\r
return error(GL_INVALID_VALUE);\r
}\r
\r
- if(!validReadFormatType(format, type))\r
- {\r
- return error(GL_INVALID_OPERATION);\r
- }\r
-\r
es2::Context *context = es2::getContext();\r
\r
if(context)\r