return true;
}
-static bool validateSubImageParams(bool compressed, GLsizei width, GLsizei height, GLint xoffset, GLint yoffset, GLenum target, GLint level, GLenum format, es1::Texture *texture)
-{
- if(!texture)
- {
- return error(GL_INVALID_OPERATION, false);
- }
-
- if(compressed != texture->isCompressed(target, level))
- {
- return error(GL_INVALID_OPERATION, false);
- }
-
- if(format != GL_NONE_OES && format != texture->getFormat(target, level))
- {
- return error(GL_INVALID_OPERATION, false);
- }
-
- if(compressed)
- {
- if((width % 4 != 0 && width != texture->getWidth(target, 0)) ||
- (height % 4 != 0 && height != texture->getHeight(target, 0)))
- {
- return error(GL_INVALID_OPERATION, false);
- }
- }
-
- if(xoffset + width > texture->getWidth(target, level) ||
- yoffset + height > texture->getHeight(target, level))
- {
- return error(GL_INVALID_VALUE, false);
- }
-
- return true;
-}
-
void ActiveTexture(GLenum texture)
{
TRACE("(GLenum texture = 0x%X)", texture);
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
break;
case GL_DEPTH_COMPONENT16_OES:
- case GL_DEPTH_COMPONENT32_OES:
case GL_DEPTH_STENCIL_OES:
case GL_DEPTH24_STENCIL8_OES:
return error(GL_INVALID_OPERATION);
{
es1::Texture2D *texture = context->getTexture2D();
- if(validateSubImageParams(true, width, height, xoffset, yoffset, target, level, format, texture))
+ GLenum validationError = ValidateSubImageParams(true, false, target, level, xoffset, yoffset, width, height, format, GL_NONE_OES, texture);
+ if(validationError != GL_NO_ERROR)
{
- texture->subImageCompressed(level, xoffset, yoffset, width, height, format, imageSize, data);
+ return error(validationError);
}
+
+ texture->subImageCompressed(level, xoffset, yoffset, width, height, format, imageSize, data);
}
else UNREACHABLE(target);
}
}
else UNREACHABLE(target);
- if(!validateSubImageParams(false, width, height, xoffset, yoffset, target, level, GL_NONE_OES, texture))
+ GLenum validationError = ValidateSubImageParams(false, true, target, level, xoffset, yoffset, width, height, GL_NONE_OES, GL_NONE_OES, texture);
+ if(validationError != GL_NO_ERROR)
{
- return;
+ return error(validationError);
}
texture->copySubImage(target, level, xoffset, yoffset, x, y, width, height, framebuffer);
"GL_OES_blend_func_separate "
"GL_OES_blend_subtract "
"GL_OES_compressed_ETC1_RGB8_texture "
- "GL_OES_depth_texture "
"GL_OES_EGL_image "
"GL_OES_EGL_image_external "
"GL_OES_EGL_sync "
switch(type)
{
case GL_UNSIGNED_BYTE:
- case GL_FLOAT:
break;
default:
return error(GL_INVALID_ENUM);
{
case GL_UNSIGNED_BYTE:
case GL_UNSIGNED_SHORT_5_6_5:
- case GL_FLOAT:
break;
default:
return error(GL_INVALID_ENUM);
case GL_UNSIGNED_BYTE:
case GL_UNSIGNED_SHORT_4_4_4_4:
case GL_UNSIGNED_SHORT_5_5_5_1:
- case GL_FLOAT:
break;
default:
return error(GL_INVALID_ENUM);
return error(GL_INVALID_VALUE);
}
- if(!es1::CheckTextureFormatType(format, type))
- {
- return error(GL_INVALID_ENUM);
- }
-
if(width == 0 || height == 0 || !pixels)
{
return;
{
es1::Texture2D *texture = context->getTexture2D();
- if(validateSubImageParams(false, width, height, xoffset, yoffset, target, level, format, texture))
+ GLenum validationError = ValidateSubImageParams(false, false, target, level, xoffset, yoffset, width, height, format, type, texture);
+ if(validationError != GL_NO_ERROR)
{
- texture->subImage(level, xoffset, yoffset, width, height, format, type, context->getUnpackAlignment(), pixels);
+ return error(validationError);
}
+
+ texture->subImage(level, xoffset, yoffset, width, height, format, type, context->getUnpackAlignment(), pixels);
}
else UNREACHABLE(target);
}
format == GL_ETC1_RGB8_OES;
}
+ bool IsSizedInternalFormat(GLint internalformat)
+ {
+ switch(internalformat)
+ {
+ case GL_ALPHA8_EXT:
+ case GL_LUMINANCE8_ALPHA8_EXT:
+ case GL_LUMINANCE8_EXT:
+ case GL_RGBA4_OES:
+ case GL_RGB5_A1_OES:
+ case GL_RGB565_OES:
+ case GL_RGB8_OES:
+ case GL_RGBA8_OES:
+ case GL_BGRA8_EXT: // GL_APPLE_texture_format_BGRA8888
+ case GL_DEPTH_COMPONENT16_OES:
+ case GL_STENCIL_INDEX8_OES:
+ case GL_DEPTH24_STENCIL8_OES:
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ GLenum ValidateSubImageParams(bool compressed, bool copy, GLenum target, GLint level, GLint xoffset, GLint yoffset,
+ GLsizei width, GLsizei height, GLenum format, GLenum type, Texture *texture)
+ {
+ if(!texture)
+ {
+ return GL_INVALID_OPERATION;
+ }
+
+ GLenum sizedInternalFormat = texture->getFormat(target, level);
+
+ if(compressed)
+ {
+ if(format != sizedInternalFormat)
+ {
+ return GL_INVALID_OPERATION;
+ }
+ }
+ else if(!copy) // CopyTexSubImage doesn't have format/type parameters.
+ {
+ GLenum validationError = ValidateTextureFormatType(format, type, sizedInternalFormat, target);
+ if(validationError != GL_NO_ERROR)
+ {
+ return validationError;
+ }
+ }
+
+ if(compressed)
+ {
+ if((width % 4 != 0 && width != texture->getWidth(target, 0)) ||
+ (height % 4 != 0 && height != texture->getHeight(target, 0)))
+ {
+ return GL_INVALID_OPERATION;
+ }
+ }
+
+ if(xoffset + width > texture->getWidth(target, level) ||
+ yoffset + height > texture->getHeight(target, level))
+ {
+ return GL_INVALID_VALUE;
+ }
+
+ return GL_NO_ERROR;
+ }
+
bool IsDepthTexture(GLenum format)
{
return format == GL_DEPTH_STENCIL_OES;
}
// Verify that format/type are one of the combinations from table 3.4.
- bool CheckTextureFormatType(GLenum format, GLenum type)
+ GLenum ValidateTextureFormatType(GLenum format, GLenum type, GLint internalformat, GLenum target)
{
switch(type)
{
case GL_UNSIGNED_BYTE:
+ case GL_UNSIGNED_SHORT_4_4_4_4:
+ case GL_UNSIGNED_SHORT_5_5_5_1:
+ case GL_UNSIGNED_SHORT_5_6_5:
+ case GL_UNSIGNED_INT_24_8_OES: // GL_OES_packed_depth_stencil
+ break;
+ default:
+ return GL_INVALID_ENUM;
+ }
+
+ switch(format)
+ {
+ case GL_ALPHA:
+ case GL_RGB:
+ case GL_RGBA:
+ case GL_LUMINANCE:
+ case GL_LUMINANCE_ALPHA:
+ case GL_BGRA_EXT: // GL_EXT_texture_format_BGRA8888
+ break;
+ case GL_DEPTH_STENCIL_OES: // GL_OES_packed_depth_stencil (GL_DEPTH_STENCIL_OES)
+ switch(target)
+ {
+ case GL_TEXTURE_2D:
+ break;
+ default:
+ return GL_INVALID_OPERATION;
+ }
+ break;
+ default:
+ return GL_INVALID_ENUM;
+ }
+
+ if((GLenum)internalformat != format)
+ {
+ if(gl::IsUnsizedInternalFormat(internalformat))
+ {
+ return GL_INVALID_OPERATION;
+ }
+
+ if(!IsSizedInternalFormat(internalformat))
+ {
+ return GL_INVALID_VALUE;
+ }
+ }
+
+ if((GLenum)internalformat == format)
+ {
+ // Validate format, type, and unsized internalformat combinations [OpenGL ES 1.1 Table 3.3]
switch(format)
{
case GL_RGBA:
- case GL_BGRA_EXT:
+ switch(type)
+ {
+ case GL_UNSIGNED_BYTE:
+ case GL_UNSIGNED_SHORT_4_4_4_4:
+ case GL_UNSIGNED_SHORT_5_5_5_1:
+ break;
+ default:
+ return GL_INVALID_OPERATION;
+ }
+ break;
case GL_RGB:
- case GL_ALPHA:
- case GL_LUMINANCE:
+ switch(type)
+ {
+ case GL_UNSIGNED_BYTE:
+ case GL_UNSIGNED_SHORT_5_6_5:
+ break;
+ default:
+ return GL_INVALID_OPERATION;
+ }
+ break;
case GL_LUMINANCE_ALPHA:
- return true;
+ case GL_LUMINANCE:
+ case GL_ALPHA:
+ switch(type)
+ {
+ case GL_UNSIGNED_BYTE:
+ break;
+ default:
+ return GL_INVALID_OPERATION;
+ }
+ break;
+ case GL_DEPTH_STENCIL_OES:
+ switch(type)
+ {
+ case GL_UNSIGNED_INT_24_8_OES: // GL_OES_packed_depth_stencil
+ break;
+ default:
+ return GL_INVALID_OPERATION;
+ }
+ break;
+ case GL_BGRA_EXT:
+ if(type != GL_UNSIGNED_BYTE) // GL_APPLE_texture_format_BGRA8888 / GL_EXT_texture_format_BGRA8888
+ {
+ return GL_INVALID_OPERATION;
+ }
+ break;
default:
- return false;
+ UNREACHABLE(format);
+ return GL_INVALID_ENUM;
}
- case GL_FLOAT:
- case GL_UNSIGNED_SHORT_4_4_4_4:
- case GL_UNSIGNED_SHORT_5_5_5_1:
- return (format == GL_RGBA);
- case GL_UNSIGNED_SHORT_5_6_5:
- return (format == GL_RGB);
- case GL_UNSIGNED_INT_24_8_OES:
- return (format == GL_DEPTH_STENCIL_OES);
+
+ return GL_NO_ERROR;
+ }
+
+ // Validate format, type, and sized internalformat combinations [OpenGL ES 3.0 Table 3.2]
+ bool validSizedInternalformat = false;
+ #define VALIDATE_INTERNALFORMAT(...) { GLint validInternalformats[] = {__VA_ARGS__}; for(GLint v : validInternalformats) {if(internalformat == v) validSizedInternalformat = true;} } break;
+
+ switch(format)
+ {
+ case GL_RGBA:
+ switch(type)
+ {
+ case GL_UNSIGNED_BYTE: VALIDATE_INTERNALFORMAT(GL_RGBA8_OES, GL_RGB5_A1_OES, GL_RGBA4_OES)
+ case GL_UNSIGNED_SHORT_4_4_4_4: VALIDATE_INTERNALFORMAT(GL_RGBA4_OES)
+ case GL_UNSIGNED_SHORT_5_5_5_1: VALIDATE_INTERNALFORMAT(GL_RGB5_A1_OES)
+ default: return GL_INVALID_OPERATION;
+ }
+ break;
+ case GL_RGB:
+ switch(type)
+ {
+ case GL_UNSIGNED_BYTE: VALIDATE_INTERNALFORMAT(GL_RGB8_OES, GL_RGB565_OES)
+ case GL_UNSIGNED_SHORT_5_6_5: VALIDATE_INTERNALFORMAT(GL_RGB565_OES)
+ default: return GL_INVALID_OPERATION;
+ }
+ break;
+ case GL_DEPTH_STENCIL_OES:
+ switch(type)
+ {
+ case GL_UNSIGNED_INT_24_8_OES: VALIDATE_INTERNALFORMAT(GL_DEPTH24_STENCIL8_OES)
+ default: return GL_INVALID_OPERATION;
+ }
+ break;
+ case GL_LUMINANCE_ALPHA:
+ switch(type)
+ {
+ case GL_UNSIGNED_BYTE: VALIDATE_INTERNALFORMAT(GL_LUMINANCE8_ALPHA8_EXT)
+ default:
+ return GL_INVALID_OPERATION;
+ }
+ break;
+ case GL_LUMINANCE:
+ switch(type)
+ {
+ case GL_UNSIGNED_BYTE: VALIDATE_INTERNALFORMAT(GL_LUMINANCE8_EXT)
+ default:
+ return GL_INVALID_OPERATION;
+ }
+ break;
+ case GL_ALPHA:
+ switch(type)
+ {
+ case GL_UNSIGNED_BYTE: VALIDATE_INTERNALFORMAT(GL_ALPHA8_EXT)
+ default:
+ return GL_INVALID_OPERATION;
+ }
+ break;
+ case GL_BGRA_EXT: // GL_APPLE_texture_format_BGRA8888
+ switch(type)
+ {
+ case GL_UNSIGNED_BYTE: VALIDATE_INTERNALFORMAT(GL_BGRA8_EXT)
+ default: return GL_INVALID_OPERATION;
+ }
+ break;
default:
- return false;
+ UNREACHABLE(format);
+ return GL_INVALID_ENUM;
+ }
+
+ #undef VALIDATE_INTERNALFORMAT
+
+ if(!validSizedInternalformat)
+ {
+ return GL_INVALID_OPERATION;
}
+
+ return GL_NO_ERROR;
}
- bool IsColorRenderable(GLenum internalformat)
+ bool IsColorRenderable(GLint internalformat)
{
switch(internalformat)
{
- case GL_RGB:
- case GL_RGBA:
case GL_RGBA4_OES:
case GL_RGB5_A1_OES:
case GL_RGB565_OES:
return false;
}
- bool IsDepthRenderable(GLenum internalformat)
+ bool IsDepthRenderable(GLint internalformat)
{
switch(internalformat)
{
return false;
}
- bool IsStencilRenderable(GLenum internalformat)
+ bool IsStencilRenderable(GLint internalformat)
{
switch(internalformat)
{
{
switch(internalformat)
{
- case GL_NONE: return 0;
- case GL_RGBA4: return 4;
- case GL_RGB5_A1: return 1;
- case GL_RGB565: return 0;
- case GL_R8: return 0;
- case GL_RG8: return 0;
- case GL_RGB8: return 0;
- case GL_RGBA8: return 8;
- case GL_R16F: return 0;
- case GL_RG16F: return 0;
- case GL_RGB16F: return 0;
- case GL_RGBA16F: return 16;
- case GL_R32F: return 0;
- case GL_RG32F: return 0;
- case GL_RGB32F: return 0;
- case GL_RGBA32F: return 32;
- case GL_BGRA8_EXT: return 8;
- case GL_R8UI: return 0;
- case GL_R8I: return 0;
- case GL_R16UI: return 0;
- case GL_R16I: return 0;
- case GL_R32UI: return 0;
- case GL_R32I: return 0;
- case GL_RG8UI: return 0;
- case GL_RG8I: return 0;
- case GL_RG16UI: return 0;
- case GL_RG16I: return 0;
- case GL_RG32UI: return 0;
- case GL_RG32I: return 0;
- case GL_SRGB8_ALPHA8: return 8;
- case GL_RGB10_A2: return 2;
- case GL_RGBA8UI: return 8;
- case GL_RGBA8I: return 8;
- case GL_RGB10_A2UI: return 2;
- case GL_RGBA16UI: return 16;
- case GL_RGBA16I: return 16;
- case GL_RGBA32I: return 32;
- case GL_RGBA32UI: return 32;
- case GL_R11F_G11F_B10F: return 0;
+ case GL_NONE_OES: return 0;
+ case GL_RGBA4_OES: return 4;
+ case GL_RGB5_A1_OES: return 1;
+ case GL_RGB565_OES: return 0;
+ case GL_RGB8_OES: return 0;
+ case GL_RGBA8_OES: return 8;
+ case GL_BGRA8_EXT: return 8;
default:
// UNREACHABLE(internalformat);
return 0;
{
switch(internalformat)
{
- case GL_NONE: return 0;
- case GL_RGBA4: return 4;
- case GL_RGB5_A1: return 5;
- case GL_RGB565: return 5;
- case GL_R8: return 8;
- case GL_RG8: return 8;
- case GL_RGB8: return 8;
- case GL_RGBA8: return 8;
- case GL_R16F: return 16;
- case GL_RG16F: return 16;
- case GL_RGB16F: return 16;
- case GL_RGBA16F: return 16;
- case GL_R32F: return 32;
- case GL_RG32F: return 32;
- case GL_RGB32F: return 32;
- case GL_RGBA32F: return 32;
- case GL_BGRA8_EXT: return 8;
- case GL_R8UI: return 8;
- case GL_R8I: return 8;
- case GL_R16UI: return 16;
- case GL_R16I: return 16;
- case GL_R32UI: return 32;
- case GL_R32I: return 32;
- case GL_RG8UI: return 8;
- case GL_RG8I: return 8;
- case GL_RG16UI: return 16;
- case GL_RG16I: return 16;
- case GL_RG32UI: return 32;
- case GL_RG32I: return 32;
- case GL_SRGB8_ALPHA8: return 8;
- case GL_RGB10_A2: return 10;
- case GL_RGBA8UI: return 8;
- case GL_RGBA8I: return 8;
- case GL_RGB10_A2UI: return 10;
- case GL_RGBA16UI: return 16;
- case GL_RGBA16I: return 16;
- case GL_RGBA32I: return 32;
- case GL_RGBA32UI: return 32;
- case GL_R11F_G11F_B10F: return 11;
+ case GL_NONE_OES: return 0;
+ case GL_RGBA4_OES: return 4;
+ case GL_RGB5_A1_OES: return 5;
+ case GL_RGB565_OES: return 5;
+ case GL_RGB8_OES: return 8;
+ case GL_RGBA8_OES: return 8;
+ case GL_BGRA8_EXT: return 8;
default:
// UNREACHABLE(internalformat);
return 0;
{
switch(internalformat)
{
- case GL_NONE: return 0;
- case GL_RGBA4: return 4;
- case GL_RGB5_A1: return 5;
- case GL_RGB565: return 6;
- case GL_R8: return 0;
- case GL_RG8: return 8;
- case GL_RGB8: return 8;
- case GL_RGBA8: return 8;
- case GL_R16F: return 0;
- case GL_RG16F: return 16;
- case GL_RGB16F: return 16;
- case GL_RGBA16F: return 16;
- case GL_R32F: return 0;
- case GL_RG32F: return 32;
- case GL_RGB32F: return 32;
- case GL_RGBA32F: return 32;
- case GL_BGRA8_EXT: return 8;
- case GL_R8UI: return 0;
- case GL_R8I: return 0;
- case GL_R16UI: return 0;
- case GL_R16I: return 0;
- case GL_R32UI: return 0;
- case GL_R32I: return 0;
- case GL_RG8UI: return 8;
- case GL_RG8I: return 8;
- case GL_RG16UI: return 16;
- case GL_RG16I: return 16;
- case GL_RG32UI: return 32;
- case GL_RG32I: return 32;
- case GL_SRGB8_ALPHA8: return 8;
- case GL_RGB10_A2: return 10;
- case GL_RGBA8UI: return 8;
- case GL_RGBA8I: return 8;
- case GL_RGB10_A2UI: return 10;
- case GL_RGBA16UI: return 16;
- case GL_RGBA16I: return 16;
- case GL_RGBA32I: return 32;
- case GL_RGBA32UI: return 32;
- case GL_R11F_G11F_B10F: return 11;
+ case GL_NONE_OES: return 0;
+ case GL_RGBA4_OES: return 4;
+ case GL_RGB5_A1_OES: return 5;
+ case GL_RGB565_OES: return 6;
+ case GL_RGB8_OES: return 8;
+ case GL_RGBA8_OES: return 8;
+ case GL_BGRA8_EXT: return 8;
default:
// UNREACHABLE(internalformat);
return 0;
{
switch(internalformat)
{
- case GL_NONE: return 0;
- case GL_RGBA4: return 4;
- case GL_RGB5_A1: return 5;
- case GL_RGB565: return 5;
- case GL_R8: return 0;
- case GL_RG8: return 0;
- case GL_RGB8: return 8;
- case GL_RGBA8: return 8;
- case GL_R16F: return 0;
- case GL_RG16F: return 0;
- case GL_RGB16F: return 16;
- case GL_RGBA16F: return 16;
- case GL_R32F: return 0;
- case GL_RG32F: return 0;
- case GL_RGB32F: return 32;
- case GL_RGBA32F: return 32;
- case GL_BGRA8_EXT: return 8;
- case GL_R8UI: return 0;
- case GL_R8I: return 0;
- case GL_R16UI: return 0;
- case GL_R16I: return 0;
- case GL_R32UI: return 0;
- case GL_R32I: return 0;
- case GL_RG8UI: return 0;
- case GL_RG8I: return 0;
- case GL_RG16UI: return 0;
- case GL_RG16I: return 0;
- case GL_RG32UI: return 0;
- case GL_RG32I: return 0;
- case GL_SRGB8_ALPHA8: return 8;
- case GL_RGB10_A2: return 10;
- case GL_RGBA8UI: return 8;
- case GL_RGBA8I: return 8;
- case GL_RGB10_A2UI: return 10;
- case GL_RGBA16UI: return 16;
- case GL_RGBA16I: return 16;
- case GL_RGBA32I: return 32;
- case GL_RGBA32UI: return 32;
- case GL_R11F_G11F_B10F: return 10;
+ case GL_NONE_OES: return 0;
+ case GL_RGBA4_OES: return 4;
+ case GL_RGB5_A1_OES: return 5;
+ case GL_RGB565_OES: return 5;
+ case GL_RGB8_OES: return 8;
+ case GL_RGBA8_OES: return 8;
+ case GL_BGRA8_EXT: return 8;
default:
// UNREACHABLE(internalformat);
return 0;
{
switch(internalformat)
{
- case GL_STENCIL_INDEX8: return 0;
- case GL_DEPTH_COMPONENT16: return 16;
- case GL_DEPTH_COMPONENT24: return 24;
- case GL_DEPTH_COMPONENT32_OES: return 32;
- case GL_DEPTH_COMPONENT32F: return 32;
- case GL_DEPTH24_STENCIL8: return 24;
- case GL_DEPTH32F_STENCIL8: return 32;
+ case GL_STENCIL_INDEX8_OES: return 0;
+ case GL_DEPTH_COMPONENT16_OES: return 16;
+ case GL_DEPTH24_STENCIL8_OES: return 24;
default:
// UNREACHABLE(internalformat);
return 0;
{
switch(internalformat)
{
- case GL_STENCIL_INDEX8: return 8;
- case GL_DEPTH_COMPONENT16: return 0;
- case GL_DEPTH_COMPONENT24: return 0;
- case GL_DEPTH_COMPONENT32_OES: return 0;
- case GL_DEPTH_COMPONENT32F: return 0;
- case GL_DEPTH24_STENCIL8: return 8;
- case GL_DEPTH32F_STENCIL8: return 8;
+ case GL_STENCIL_INDEX8_OES: return 8;
+ case GL_DEPTH_COMPONENT16_OES: return 0;
+ case GL_DEPTH24_STENCIL8_OES: return 8;
default:
// UNREACHABLE(internalformat);
return 0;
}
}
- bool IsAlpha(GLenum texFormat)
+ bool IsAlpha(GLint internalformat)
{
- switch(texFormat)
+ switch(internalformat)
{
- case GL_ALPHA:
+ case GL_ALPHA8_EXT:
return true;
default:
return false;
}
}
- bool IsRGB(GLenum texFormat)
+ bool IsRGB(GLint internalformat)
{
- switch(texFormat)
+ switch(internalformat)
{
- case GL_LUMINANCE:
- case GL_RGB:
- case GL_RGB565_OES: // GL_OES_framebuffer_object
- case GL_RGB8_OES: // GL_OES_rgb8_rgba8
+ case GL_LUMINANCE8_EXT:
+ case GL_RGB565_OES:
+ case GL_RGB8_OES:
case SW_YV12_BT601:
case SW_YV12_BT709:
case SW_YV12_JFIF:
}
}
- bool IsRGBA(GLenum texFormat)
+ bool IsRGBA(GLint internalformat)
{
- switch(texFormat)
+ switch(internalformat)
{
- case GL_LUMINANCE_ALPHA:
+ case GL_LUMINANCE8_ALPHA8_EXT:
case GL_RGBA:
- case GL_BGRA_EXT: // GL_EXT_texture_format_BGRA8888
- case GL_RGBA4_OES: // GL_OES_framebuffer_object
- case GL_RGB5_A1_OES: // GL_OES_framebuffer_object
- case GL_RGBA8_OES: // GL_OES_rgb8_rgba8
+ case GL_BGRA8_EXT: // GL_EXT_texture_format_BGRA8888
+ case GL_RGBA4_OES:
+ case GL_RGB5_A1_OES:
+ case GL_RGBA8_OES:
return true;
default:
return false;
sw::DrawType elementSize;
switch(elementType)
{
- case GL_NONE: elementSize = sw::DRAW_NONINDEXED; break;
+ case GL_NONE_OES: elementSize = sw::DRAW_NONINDEXED; break;
case GL_UNSIGNED_BYTE: elementSize = sw::DRAW_INDEXED8; break;
case GL_UNSIGNED_SHORT: elementSize = sw::DRAW_INDEXED16; break;
case GL_UNSIGNED_INT: elementSize = sw::DRAW_INDEXED32; break;
return true;
}
- sw::Format ConvertRenderbufferFormat(GLenum format)
- {
- switch(format)
- {
- case GL_RGBA4_OES:
- case GL_RGB5_A1_OES:
- case GL_RGBA8_OES: return sw::FORMAT_A8B8G8R8;
- case GL_RGB565_OES: return sw::FORMAT_R5G6B5;
- case GL_RGB8_OES: return sw::FORMAT_X8B8G8R8;
- case GL_DEPTH_COMPONENT16_OES:
- case GL_STENCIL_INDEX8_OES:
- case GL_DEPTH24_STENCIL8_OES: return sw::FORMAT_D24S8;
- default: UNREACHABLE(format); return sw::FORMAT_A8B8G8R8;
- }
- }
-
sw::TextureStage::StageOperation ConvertCombineOperation(GLenum operation)
{
switch(operation)