Already working GUI in shader-based pipeline

This commit is contained in:
Deve 2016-06-25 15:10:53 +02:00
parent d13716a917
commit ce8a1c4e1b
6 changed files with 58 additions and 21 deletions

View File

@ -0,0 +1,13 @@
#version 300 es
precision mediump float;
uniform sampler2D tex;
in vec2 uv;
out vec4 FragColor;
void main()
{
FragColor = texture(tex, uv);
}

View File

@ -0,0 +1,10 @@
#version 300 es
in vec3 Position;
in vec2 Texcoord;
out vec2 uv;
void main() {
uv = Texcoord;
gl_Position = vec4(Position, 1.);
}

View File

@ -7,5 +7,5 @@ out vec4 FragColor;
void main()
{
vec4 res = texture(tex, uv);
FragColor = res * color / 255.;
FragColor = res * vec4(color) / 255.;
}

View File

@ -71,8 +71,8 @@ void CentralVideoSettings::init()
#if !defined(ANDROID) && !defined(USE_GLES2)
m_glsl = (m_gl_major_version > 3 || (m_gl_major_version == 3 && m_gl_minor_version >= 1))
&& !UserConfigParams::m_force_legacy_device;
#else
m_glsl = false;
#elif !defined(ANDROID)
m_glsl = m_gl_major_version >= 3 && !UserConfigParams::m_force_legacy_device;
#endif
if (!ProfileWorld::isNoGraphics())
initGL();

View File

@ -67,6 +67,10 @@ GLuint ShaderBase::loadShader(const std::string &file, unsigned type)
#if !defined(ANDROID) && !defined(USE_GLES2)
code << "#version " << CVS->getGLSLVersion()<<"\n";
#endif
#if defined(USE_GLES2)
if (CVS->isGLSL())
code << "#version 300 es\n";
#endif
// Some drivers report that the compute shaders extension is available,
// but they report only OpenGL 3.x version, and thus these extensions

View File

@ -180,6 +180,10 @@ GLuint loadShader(const char * file, unsigned type)
char versionString[20];
#if !defined(ANDROID) && !defined(USE_GLES2)
sprintf(versionString, "#version %d\n", CVS->getGLSLVersion());
#endif
#if defined(USE_GLES2)
if (CVS->isGLSL())
sprintf(versionString, "#version 300 es\n");
#endif
std::string Code = versionString;
if (CVS->isAMDVertexShaderLayerUsable())
@ -247,45 +251,51 @@ void Shaders::loadShaders()
// Save previous shaders (used in case some shaders don't compile)
int saved_shaders[ES_COUNT];
memcpy(saved_shaders, m_shaders, sizeof(m_shaders));
#if !defined(ANDROID) && !defined(USE_GLES2)
std::string name = "pass";
#else
std::string name = "pass_gles";
#endif
// Ok, go
m_shaders[ES_NORMAL_MAP] = glsl_noinput(dir + "pass.vert", dir + "pass.frag");
m_shaders[ES_NORMAL_MAP_LIGHTMAP] = glsl_noinput(dir + "pass.vert", dir + "pass.frag");
m_shaders[ES_NORMAL_MAP] = glsl_noinput(dir + name + ".vert", dir + name + ".frag");
m_shaders[ES_NORMAL_MAP_LIGHTMAP] = glsl_noinput(dir + name + "vert", dir + name + "frag");
m_shaders[ES_SKYBOX] = glslmat(dir + "pass.vert", dir + "pass.frag",
m_shaders[ES_SKYBOX] = glslmat(dir + name + "vert", dir + name + "frag",
m_callbacks[ES_SKYBOX], EMT_TRANSPARENT_ALPHA_CHANNEL);
m_shaders[ES_SPLATTING] = glsl_noinput(dir + "pass.vert", dir + "pass.frag");
m_shaders[ES_SPLATTING] = glsl_noinput(dir + name + "vert", dir + name + "frag");
m_shaders[ES_WATER] = glslmat(dir + "pass.vert", dir + "pass.frag",
m_shaders[ES_WATER] = glslmat(dir + name + "vert", dir + name + "frag",
m_callbacks[ES_WATER], EMT_TRANSPARENT_ALPHA_CHANNEL);
m_shaders[ES_WATER_SURFACE] = glsl(dir + "pass.vert", dir + "pass.frag",
m_shaders[ES_WATER_SURFACE] = glsl(dir + name + "vert", dir + name + "frag",
m_callbacks[ES_WATER]);
m_shaders[ES_SPHERE_MAP] = glsl_noinput(dir + "pass.vert", dir + "pass.frag");
m_shaders[ES_SPHERE_MAP] = glsl_noinput(dir + name + "vert", dir + name + "frag");
m_shaders[ES_GRASS] = glslmat(dir + "pass.vert", dir + "pass.frag",
m_shaders[ES_GRASS] = glslmat(dir + name + "vert", dir + name + "frag",
m_callbacks[ES_GRASS], EMT_TRANSPARENT_ALPHA_CHANNEL);
m_shaders[ES_GRASS_REF] = glslmat(dir + "pass.vert", dir + "pass.frag",
m_shaders[ES_GRASS_REF] = glslmat(dir + name + "vert", dir + name + "frag",
m_callbacks[ES_GRASS], EMT_TRANSPARENT_ALPHA_CHANNEL_REF);
m_shaders[ES_MOTIONBLUR] = glsl(dir + "pass.vert", dir + "pass.frag",
m_shaders[ES_MOTIONBLUR] = glsl(dir + name + "vert", dir + name + "frag",
m_callbacks[ES_MOTIONBLUR]);
m_shaders[ES_GAUSSIAN3H] = glslmat(dir + "pass.vert", dir + "pass.frag",
m_shaders[ES_GAUSSIAN3H] = glslmat(dir + name + "vert", dir + name + "frag",
m_callbacks[ES_GAUSSIAN3H], EMT_SOLID);
m_shaders[ES_GAUSSIAN3V] = glslmat(dir + "pass.vert", dir + "pass.frag",
m_shaders[ES_GAUSSIAN3V] = glslmat(dir + name + "vert", dir + name + "frag",
m_callbacks[ES_GAUSSIAN3V], EMT_SOLID);
m_shaders[ES_MIPVIZ] = glslmat(dir + "pass.vert", dir + "pass.frag",
m_shaders[ES_MIPVIZ] = glslmat(dir + name + "vert", dir + name + "frag",
m_callbacks[ES_MIPVIZ], EMT_SOLID);
m_shaders[ES_OBJECTPASS] = glsl_noinput(dir + "pass.vert", dir + "pass.frag");
m_shaders[ES_OBJECT_UNLIT] = glsl_noinput(dir + "pass.vert", dir + "pass.frag");
m_shaders[ES_OBJECTPASS_REF] = glsl_noinput(dir + "pass.vert", dir + "pass.frag");
m_shaders[ES_OBJECTPASS_RIMLIT] = glsl_noinput(dir + "pass.vert", dir + "pass.frag");
m_shaders[ES_OBJECTPASS] = glsl_noinput(dir + name + "vert", dir + name + "frag");
m_shaders[ES_OBJECT_UNLIT] = glsl_noinput(dir + name + "vert", dir + name + "frag");
m_shaders[ES_OBJECTPASS_REF] = glsl_noinput(dir + name + "vert", dir + name + "frag");
m_shaders[ES_OBJECTPASS_RIMLIT] = glsl_noinput(dir + name + "vert", dir + name + "frag");
m_shaders[ES_DISPLACE] = glslmat(dir + "pass.vert", dir + "pass.frag",
m_shaders[ES_DISPLACE] = glslmat(dir + name + "vert", dir + name + "frag",
m_callbacks[ES_DISPLACE], EMT_TRANSPARENT_ALPHA_CHANNEL);
// Check that all successfully loaded