glsl framebuffer_fetch extension check at runtime
This commit is contained in:
@@ -63,6 +63,13 @@
|
||||
" return fract(sin(sn) * c);\n"\
|
||||
"}\n"
|
||||
|
||||
#define SHADER_EXT_FB_FETCH \
|
||||
"#if defined(GL_EXT_shader_framebuffer_fetch)\n"\
|
||||
" #extension GL_EXT_shader_framebuffer_fetch : enable\n"\
|
||||
"#elif defined(GL_ARM_shader_framebuffer_fetch)\n"\
|
||||
" #extension GL_ARM_shader_framebuffer_fetch : enable\n"\
|
||||
"#endif\n"
|
||||
|
||||
void App::initShaders()
|
||||
{
|
||||
static const char* shader_v =
|
||||
@@ -85,9 +92,7 @@ void App::initShaders()
|
||||
"}\n";
|
||||
static const char* shader_blend_f =
|
||||
SHADER_VERSION
|
||||
"#if defined(GL_EXT_shader_framebuffer_fetch)\n"
|
||||
" #extension GL_EXT_shader_framebuffer_fetch : enable\n"
|
||||
"#endif\n"
|
||||
SHADER_EXT_FB_FETCH
|
||||
"uniform sampler2D tex;\n"
|
||||
"uniform sampler2D tex_alpha;\n"
|
||||
"uniform sampler2D tex_bg;\n"
|
||||
@@ -103,6 +108,8 @@ void App::initShaders()
|
||||
"void main() {\n"
|
||||
"#if defined(GL_EXT_shader_framebuffer_fetch)\n"
|
||||
" highp vec4 bg = frag;\n"
|
||||
"#elif defined(GL_ARM_shader_framebuffer_fetch)\n"
|
||||
" highp vec4 bg = gl_LastFragColorARM;\n"
|
||||
"#else\n"
|
||||
" mediump vec4 bg = texture(tex_bg, uv);\n"
|
||||
"#endif\n"
|
||||
@@ -357,9 +364,7 @@ void App::initShaders()
|
||||
"}\n";
|
||||
static const char* shader_stroke_f =
|
||||
SHADER_VERSION
|
||||
"#if defined(GL_EXT_shader_framebuffer_fetch)\n"
|
||||
" #extension GL_EXT_shader_framebuffer_fetch : enable\n"
|
||||
"#endif\n"
|
||||
SHADER_EXT_FB_FETCH
|
||||
"uniform mediump sampler2D tex;\n"
|
||||
"uniform mediump sampler2D tex_bg;\n"
|
||||
"uniform mediump sampler2D tex_stencil;\n"
|
||||
@@ -388,6 +393,8 @@ void App::initShaders()
|
||||
" mediump vec4 fg = vec4(col.rgb, brush_alpha * stencil);\n"
|
||||
"#if defined(GL_EXT_shader_framebuffer_fetch)\n"
|
||||
" mediump vec4 bg = frag;\n"
|
||||
"#elif defined(GL_ARM_shader_framebuffer_fetch)\n"
|
||||
" mediump vec4 bg = gl_LastFragColorARM;\n"
|
||||
"#else\n"
|
||||
" mediump vec4 bg = texture(tex_bg, uv2);\n"
|
||||
"#endif\n"
|
||||
@@ -592,6 +599,18 @@ void App::initShaders()
|
||||
" }\n"
|
||||
"}\n";
|
||||
|
||||
GLint n_exts;
|
||||
glGetIntegerv(GL_NUM_EXTENSIONS, &n_exts);
|
||||
for (int i = 0; i < n_exts; i++)
|
||||
{
|
||||
std::string ext = (const char*)glGetStringi(GL_EXTENSIONS, i);
|
||||
if (ext.find("shader_framebuffer_fetch") != std::string::npos)
|
||||
{
|
||||
ShaderManager::ext_framebuffer_fetch = true;
|
||||
}
|
||||
}
|
||||
|
||||
LOG("Shader Extension shader_framebuffer_fetch: %s", ShaderManager::ext_framebuffer_fetch ? "enabled" : "disabled");
|
||||
|
||||
LOG("initializing shaders");
|
||||
if (!ShaderManager::create(kShader::Texture, shader_v, shader_f))
|
||||
|
||||
Reference in New Issue
Block a user