hasTexRGBA8 = IsGlGreaterEqual (3, 0)
|| CheckExtension ("GL_OES_rgb8_rgba8");
- hasTexSRGB = IsGlGreaterEqual (3, 0);
- hasFboSRGB = IsGlGreaterEqual (3, 0);
+ hasTexSRGB = IsGlGreaterEqual (3, 0)
+ || CheckExtension ("GL_EXT_sRGB");
+ hasFboSRGB = IsGlGreaterEqual (3, 0)
+ || CheckExtension ("GL_EXT_sRGB");
hasFboRenderMipmap = IsGlGreaterEqual (3, 0)
|| CheckExtension ("GL_OES_fbo_render_mipmap");
hasSRGBControl = CheckExtension ("GL_EXT_sRGB_write_control");
GL_BACK;
#endif
GLint aWinColorEncoding = 0; // GL_LINEAR
- arbFBO->glGetFramebufferAttachmentParameteriv (GL_FRAMEBUFFER, aDefWinBuffer, GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, &aWinColorEncoding);
- ResetErrors (true);
+ bool toSkipCheck = false;
+ #ifdef __EMSCRIPTEN__
+ toSkipCheck = !IsGlGreaterEqual (3, 0);
+ #endif
+ if (!toSkipCheck)
+ {
+ arbFBO->glGetFramebufferAttachmentParameteriv (GL_FRAMEBUFFER, aDefWinBuffer, GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, &aWinColorEncoding);
+ ResetErrors (true);
+ }
myIsSRgbWindow = aWinColorEncoding == GL_SRGB;
// On desktop OpenGL, pixel formats are almost always sRGB-ready, even when not requested;
case 0x8050: return "GL_RGB5";
case GL_RGB8: return "GL_RGB8";
case GL_SRGB8: return "GL_SRGB8";
+ case GL_SRGB_EXT: return "GL_SRGB_EXT";
case 0x8052: return "GL_RGB10";
case 0x8053: return "GL_RGB12";
case 0x8054: return "GL_RGB16";
// RGBA variations
case GL_RGBA: return "GL_RGBA";
case GL_RGBA8: return "GL_RGBA8";
- case GL_SRGB8_ALPHA8: return "GL_SRGB8_ALPHA8";
+ case GL_SRGB8_ALPHA8: return "GL_SRGB8_ALPHA8";
+ case GL_SRGB_ALPHA_EXT: return "GL_SRGB_ALPHA_EXT";
case GL_RGB10_A2: return "GL_RGB10_A2";
case 0x805A: return "GL_RGBA12";
case 0x805B: return "GL_RGBA16";
if (theIsColorMap
&& theCtx->ToRenderSRGB())
{
+ #if defined(GL_ES_VERSION_2_0)
+ if (!theCtx->IsGlGreaterEqual (3, 0))
+ {
+ aFormat.SetPixelFormat (GL_SRGB_ALPHA_EXT);
+ }
+ #endif
aFormat.SetInternalFormat (GL_SRGB8_ALPHA8);
}
return aFormat;
if (theIsColorMap
&& theCtx->ToRenderSRGB())
{
+ if (!theCtx->IsGlGreaterEqual (3, 0))
+ {
+ aFormat.SetPixelFormat (GL_SRGB_ALPHA_EXT);
+ }
aFormat.SetInternalFormat (GL_SRGB8_ALPHA8);
}
#endif
if (theIsColorMap
&& theCtx->ToRenderSRGB())
{
+ #if defined(GL_ES_VERSION_2_0)
+ if (!theCtx->IsGlGreaterEqual (3, 0))
+ {
+ aFormat.SetPixelFormat (GL_SRGB_EXT);
+ }
+ #endif
aFormat.SetInternalFormat (GL_SRGB8);
}
return aFormat;
return aFormat;
}
case GL_SRGB8_ALPHA8:
+ case GL_SRGB_ALPHA_EXT:
case GL_RGBA8:
case GL_RGBA:
{
aFormat.SetPixelFormat (GL_RGBA);
aFormat.SetDataType (GL_UNSIGNED_BYTE);
aFormat.SetImageFormat (Image_Format_RGBA);
- if (theSizedFormat == GL_SRGB8_ALPHA8
+ if ((theSizedFormat == GL_SRGB8_ALPHA8 || theSizedFormat == GL_SRGB_ALPHA_EXT)
&& !theCtx->ToRenderSRGB())
{
aFormat.SetInternalFormat (GL_RGBA8); // fallback format
return aFormat;
}
case GL_SRGB8:
+ case GL_SRGB_EXT:
case GL_RGB8:
case GL_RGB:
{
aFormat.SetPixelFormat (GL_RGB);
aFormat.SetDataType (GL_UNSIGNED_BYTE);
aFormat.SetImageFormat (Image_Format_RGB);
- if (theSizedFormat == GL_SRGB8
+ if ((theSizedFormat == GL_SRGB8 || theSizedFormat == GL_SRGB_EXT)
&& !theCtx->ToRenderSRGB())
{
aFormat.SetInternalFormat (GL_RGB8); // fallback format