OPENGL: Fix shader compilation with older Android GPU drivers

This commit is contained in:
Cameron Cawley 2022-03-01 20:06:51 +00:00 committed by aquadran
parent 930d9236b8
commit a4c99343b3

View file

@ -80,7 +80,7 @@ const char *const g_lookUpFragmentShader =
// Taken from: https://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_03#OpenGL_ES_2_portability // Taken from: https://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_03#OpenGL_ES_2_portability
const char *const g_precisionDefines = const char *const g_precisionDefines =
"#ifdef GL_ES\n" "#ifdef GL_ES\n"
"\t#if defined(GL_FRAGMENT_PRECISION_HIGH) && GL_FRAGMENT_PRECISION_HIGH == 1\n" "\t#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
"\t\tprecision highp float;\n" "\t\tprecision highp float;\n"
"\t#else\n" "\t#else\n"
"\t\tprecision mediump float;\n" "\t\tprecision mediump float;\n"
@ -253,6 +253,8 @@ bool Shader::setUniform(const Common::String &name, ShaderUniformValue *value) {
GLshader Shader::compileShader(const char *source, GLenum shaderType) { GLshader Shader::compileShader(const char *source, GLenum shaderType) {
const GLchar *versionSource = g_context.type == kContextGLES2 ? "#version 100\n" : "#version 110\n"; const GLchar *versionSource = g_context.type == kContextGLES2 ? "#version 100\n" : "#version 110\n";
const GLchar *compatSource = shaderType == GL_VERTEX_SHADER ? "" : g_precisionDefines;
GLshader handle; GLshader handle;
GL_ASSIGN(handle, glCreateShader(shaderType)); GL_ASSIGN(handle, glCreateShader(shaderType));
if (!handle) { if (!handle) {
@ -261,7 +263,7 @@ GLshader Shader::compileShader(const char *source, GLenum shaderType) {
const char *const shaderSources[] = { const char *const shaderSources[] = {
versionSource, versionSource,
g_precisionDefines, compatSource,
source source
}; };
@ -276,7 +278,7 @@ GLshader Shader::compileShader(const char *source, GLenum shaderType) {
GLchar *log = new GLchar[logSize]; GLchar *log = new GLchar[logSize];
GL_CALL(glGetShaderInfoLog(handle, logSize, nullptr, log)); GL_CALL(glGetShaderInfoLog(handle, logSize, nullptr, log));
warning("Could not compile shader \"%s\": \"%s\"", source, log); warning("Could not compile shader \"%s%s%s\": \"%s\"", versionSource, compatSource, source, log);
delete[] log; delete[] log;
GL_CALL(glDeleteShader(handle)); GL_CALL(glDeleteShader(handle));