Added EXT_shader_texture_lod support.

This commit is contained in:
Branimir Karadžić 2014-02-16 16:08:44 -08:00
parent e2532b37ff
commit 101a2162ff

View File

@ -249,6 +249,7 @@ namespace bgfx
EXT_framebuffer_blit,
EXT_framebuffer_sRGB,
EXT_occlusion_query_boolean,
EXT_shader_texture_lod,
EXT_shadow_samplers,
EXT_texture_array,
EXT_texture_compression_dxt1,
@ -337,6 +338,7 @@ namespace bgfx
{ "GL_EXT_framebuffer_blit", BGFX_CONFIG_RENDERER_OPENGL >= 30, true },
{ "GL_EXT_framebuffer_sRGB", BGFX_CONFIG_RENDERER_OPENGL >= 30, true },
{ "GL_EXT_occlusion_query_boolean", false, true },
{ "GL_EXT_shader_texture_lod", false, true }, // GLES2 extension.
{ "GL_EXT_shadow_samplers", false, true },
{ "GL_EXT_texture_array", BGFX_CONFIG_RENDERER_OPENGL >= 30, true },
{ "GL_EXT_texture_compression_dxt1", false, true },
@ -397,6 +399,17 @@ namespace bgfx
// "shadow1DProjLod",
};
static const char* s_EXT_shader_texture_lod[] =
{
"texture2DLod",
"texture2DProjLod",
"textureCubeLod",
NULL
// "texture2DGrad",
// "texture2DProjGrad",
// "textureCubeGrad",
};
static const char* s_EXT_shadow_samplers[] =
{
"shadow2D",
@ -1890,6 +1903,8 @@ namespace bgfx
&& bx::findIdentifierMatch(code, s_OES_texture_3D)
;
bool usesTextureLod = !!bx::findIdentifierMatch(code, s_EXT_shader_texture_lod);
if (usesDerivatives)
{
writeString(&writer, "#extension GL_OES_standard_derivatives : enable\n");
@ -1898,6 +1913,7 @@ namespace bgfx
bool insertFragDepth = false;
if (usesFragDepth)
{
BX_WARN(s_extension[Extension::EXT_frag_depth].m_supported, "EXT_frag_depth is used but not supported by GLES2 driver.");
if (s_extension[Extension::EXT_frag_depth].m_supported)
{
writeString(&writer
@ -1927,6 +1943,28 @@ namespace bgfx
writeString(&writer, "#extension GL_OES_texture_3D : enable\n");
}
if (usesTextureLod)
{
BX_WARN(s_extension[Extension::EXT_shader_texture_lod].m_supported, "EXT_shader_texture_lod is used but not supported by GLES2 driver.");
if (s_extension[Extension::EXT_shader_texture_lod].m_supported)
{
writeString(&writer
, "#extension GL_EXT_shader_texture_lod : enable\n"
"#define texture2DLod texture2DLodEXT\n"
"#define texture2DProjLod texture2DProjLodEXT\n"
"#define textureCubeLod textureCubeLodEXT\n"
);
}
else
{
writeString(&writer
, "#define texture2DLod(_sampler, _coord, _level) texture2D(_sampler, _coord)\n"
"#define texture2DProjLod(_sampler, _coord, _level) texture2DProj(_sampler, _coord)\n"
"#define textureCubeLod(_sampler, _coord, _level) textureCube(_sampler, _coord)\n"
);
}
}
writeString(&writer, "precision highp float;\n");
bx::write(&writer, code, codeLen);