From 4c6f8239faf0f93c34f5b081d38cb27cf8145ef6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Kapu=C5=9Bci=C5=84ski?= Date: Mon, 14 Mar 2016 21:44:25 +0100 Subject: [PATCH] Renamed and moved GL33 shader files to separate directory --- src/graphics/opengl/gl21device.h | 3 - src/graphics/opengl/gl33device.cpp | 49 ++---- src/graphics/opengl/gl33device.h | 2 - src/graphics/opengl/shaders/CMakeLists.txt | 3 +- .../shaders/fragment_shader_33_perpixel.glsl | 154 ------------------ .../fs_interface.glsl} | 2 +- .../fs_normal.glsl} | 2 +- .../fs_shadow.glsl} | 2 +- .../vs_interface.glsl} | 2 +- .../vs_normal.glsl} | 2 +- .../vs_shadow.glsl} | 2 +- .../shaders/vertex_shader_33_perpixel.glsl | 61 ------- 12 files changed, 22 insertions(+), 262 deletions(-) delete mode 100644 src/graphics/opengl/shaders/fragment_shader_33_perpixel.glsl rename src/graphics/opengl/shaders/{fragment_shader_33_interface.glsl => gl33/fs_interface.glsl} (96%) rename src/graphics/opengl/shaders/{fragment_shader_33_pervertex.glsl => gl33/fs_normal.glsl} (98%) rename src/graphics/opengl/shaders/{fragment_shader_33_shadow.glsl => gl33/fs_shadow.glsl} (97%) rename src/graphics/opengl/shaders/{vertex_shader_33_interface.glsl => gl33/vs_interface.glsl} (97%) rename src/graphics/opengl/shaders/{vertex_shader_33_pervertex.glsl => gl33/vs_normal.glsl} (99%) rename src/graphics/opengl/shaders/{vertex_shader_33_shadow.glsl => gl33/vs_shadow.glsl} (97%) delete mode 100644 src/graphics/opengl/shaders/vertex_shader_33_perpixel.glsl diff --git a/src/graphics/opengl/gl21device.h b/src/graphics/opengl/gl21device.h index 5f75ab0e..7e941f82 100644 --- a/src/graphics/opengl/gl21device.h +++ b/src/graphics/opengl/gl21device.h @@ -255,9 +255,6 @@ private: //! Currently bound VBO GLuint m_currentVBO = 0; - //! true enables per-pixel lighting - bool m_perPixelLighting = false; - //! Shader program for normal rendering GLuint m_normalProgram = 0; //! Shader program for interface rendering diff --git a/src/graphics/opengl/gl33device.cpp b/src/graphics/opengl/gl33device.cpp index b3b576b6..9a2d9f1d 100644 --- a/src/graphics/opengl/gl33device.cpp +++ b/src/graphics/opengl/gl33device.cpp @@ -245,44 +245,25 @@ bool CGL33Device::Create() m_texturesEnabled = std::vector (maxTextures, false); m_textureStageParams = std::vector(maxTextures, TextureStageParams()); - int value; - if (CConfigFile::GetInstance().GetIntProperty("Setup", "PerPixelLighting", value)) - { - m_perPixelLighting = value > 0; - } - - char shading[16]; - - if (m_perPixelLighting) - { - strcpy(shading, "perpixel"); - CLogger::GetInstance().Info("Using per-pixel lighting\n"); - } - else - { - strcpy(shading, "pervertex"); - CLogger::GetInstance().Info("Using per-vertex lighting\n"); - } - // Create shader program for normal rendering GLint shaders[2]; char filename[64]; - sprintf(filename, "shaders/vertex_shader_33_%s.glsl", shading); + strcpy(filename, "shaders/gl33/vs_normal.glsl"); shaders[0] = LoadShader(GL_VERTEX_SHADER, filename); if (shaders[0] == 0) { m_errorMessage = GetLastShaderError(); - GetLogger()->Error("Count not create vertex shader from file '%s'\n", filename); + GetLogger()->Error("Cound not create vertex shader from file '%s'\n", filename); return false; } - sprintf(filename, "shaders/fragment_shader_33_%s.glsl", shading); + strcpy(filename, "shaders/gl33/fs_normal.glsl"); shaders[1] = LoadShader(GL_FRAGMENT_SHADER, filename); if (shaders[1] == 0) { m_errorMessage = GetLastShaderError(); - GetLogger()->Error("Count not create fragment shader from file '%s'\n", filename); + GetLogger()->Error("Cound not create fragment shader from file '%s'\n", filename); return false; } @@ -290,7 +271,7 @@ bool CGL33Device::Create() if (m_normalProgram == 0) { m_errorMessage = GetLastShaderError(); - GetLogger()->Error("Count not link shader program for normal rendering\n"); + GetLogger()->Error("Cound not link shader program for normal rendering\n"); return false; } @@ -298,21 +279,21 @@ bool CGL33Device::Create() glDeleteShader(shaders[1]); // Create program for interface rendering - strcpy(filename, "shaders/vertex_shader_33_interface.glsl"); + strcpy(filename, "shaders/gl33/vs_interface.glsl"); shaders[0] = LoadShader(GL_VERTEX_SHADER, filename); if (shaders[0] == 0) { m_errorMessage = GetLastShaderError(); - GetLogger()->Error("Count not create vertex shader from file '%s'\n", filename); + GetLogger()->Error("Cound not create vertex shader from file '%s'\n", filename); return false; } - strcpy(filename, "shaders/fragment_shader_33_interface.glsl"); + strcpy(filename, "shaders/gl33/fs_interface.glsl"); shaders[1] = LoadShader(GL_FRAGMENT_SHADER, filename); if (shaders[1] == 0) { m_errorMessage = GetLastShaderError(); - GetLogger()->Error("Count not create fragment shader from file '%s'\n", filename); + GetLogger()->Error("Cound not create fragment shader from file '%s'\n", filename); return false; } @@ -320,7 +301,7 @@ bool CGL33Device::Create() if (m_interfaceProgram == 0) { m_errorMessage = GetLastShaderError(); - GetLogger()->Error("Count not link shader program for interface rendering\n"); + GetLogger()->Error("Cound not link shader program for interface rendering\n"); return false; } @@ -328,21 +309,21 @@ bool CGL33Device::Create() glDeleteShader(shaders[1]); // Create program for shadow rendering - strcpy(filename, "shaders/vertex_shader_33_shadow.glsl"); + strcpy(filename, "shaders/gl33/vs_shadow.glsl"); shaders[0] = LoadShader(GL_VERTEX_SHADER, filename); if (shaders[0] == 0) { m_errorMessage = GetLastShaderError(); - GetLogger()->Error("Count not create vertex shader from file '%s'\n", filename); + GetLogger()->Error("Cound not create vertex shader from file '%s'\n", filename); return false; } - strcpy(filename, "shaders/fragment_shader_33_shadow.glsl"); + strcpy(filename, "shaders/gl33/fs_shadow.glsl"); shaders[1] = LoadShader(GL_FRAGMENT_SHADER, filename); if (shaders[1] == 0) { m_errorMessage = GetLastShaderError(); - GetLogger()->Error("Count not create fragment shader from file '%s'\n", filename); + GetLogger()->Error("Cound not create fragment shader from file '%s'\n", filename); return false; } @@ -350,7 +331,7 @@ bool CGL33Device::Create() if (m_shadowProgram == 0) { m_errorMessage = GetLastShaderError(); - GetLogger()->Error("Count not link shader program for shadow rendering\n"); + GetLogger()->Error("Cound not link shader program for shadow rendering\n"); return false; } diff --git a/src/graphics/opengl/gl33device.h b/src/graphics/opengl/gl33device.h index 57b4591f..49b04977 100644 --- a/src/graphics/opengl/gl33device.h +++ b/src/graphics/opengl/gl33device.h @@ -277,8 +277,6 @@ private: GLuint m_interfaceProgram = 0; //! Shader program for shadow rendering GLuint m_shadowProgram = 0; - //! true enables per-pixel lighting - bool m_perPixelLighting = false; //! Auxiliary VAO for rendering primitives with DrawPrimitive* GLuint m_auxiliaryVAO = 0; diff --git a/src/graphics/opengl/shaders/CMakeLists.txt b/src/graphics/opengl/shaders/CMakeLists.txt index bc453c78..716a9655 100644 --- a/src/graphics/opengl/shaders/CMakeLists.txt +++ b/src/graphics/opengl/shaders/CMakeLists.txt @@ -1,3 +1,2 @@ -file(GLOB shaders *.glsl) -install(FILES ${shaders} DESTINATION ${COLOBOT_INSTALL_DATA_DIR}/shaders) install(DIRECTORY gl21 DESTINATION ${COLOBOT_INSTALL_DATA_DIR}/shaders) +install(DIRECTORY gl33 DESTINATION ${COLOBOT_INSTALL_DATA_DIR}/shaders) diff --git a/src/graphics/opengl/shaders/fragment_shader_33_perpixel.glsl b/src/graphics/opengl/shaders/fragment_shader_33_perpixel.glsl deleted file mode 100644 index d184c3a4..00000000 --- a/src/graphics/opengl/shaders/fragment_shader_33_perpixel.glsl +++ /dev/null @@ -1,154 +0,0 @@ -/* - * This file is part of the Colobot: Gold Edition source code - * Copyright (C) 2001-2014, Daniel Roux, EPSITEC SA & TerranovaTeam - * http://epsitec.ch; http://colobot.info; http://github.com/colobot - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see http://gnu.org/licenses - */ - -// FRAGMENT SHADER -#version 330 - -struct LightParams -{ - bool Enabled; - vec4 Position; - vec4 Ambient; - vec4 Diffuse; - vec4 Specular; - float Shininess; - vec3 Attenuation; -}; - -uniform sampler2D uni_PrimaryTexture; -uniform sampler2D uni_SecondaryTexture; -uniform sampler2DShadow uni_ShadowTexture; - -uniform bool uni_PrimaryTextureEnabled; -uniform bool uni_SecondaryTextureEnabled; -uniform bool uni_ShadowTextureEnabled; - -uniform bool uni_FogEnabled; -uniform vec2 uni_FogRange; -uniform vec4 uni_FogColor; - -uniform float uni_ShadowColor; - -uniform bool uni_AlphaTestEnabled; -uniform float uni_AlphaReference; - -uniform vec4 uni_AmbientColor; -uniform vec4 uni_DiffuseColor; -uniform vec4 uni_SpecularColor; - -uniform bool uni_LightingEnabled; -uniform LightParams uni_Light[8]; - -uniform bool uni_SmoothShading; - -in VertexData -{ - vec3 Normal; - vec4 Color; - vec2 TexCoord0; - vec2 TexCoord1; - vec4 ShadowCoord; - vec4 Position; - float Distance; -} data; - -out vec4 out_FragColor; - -void main() -{ - vec4 color = data.Color; - - if (uni_LightingEnabled) - { - vec4 ambient = vec4(0.0f); - vec4 diffuse = vec4(0.0f); - vec4 specular = vec4(0.0f); - - vec3 normal = (gl_FrontFacing ? data.Normal : -data.Normal); - - for(int i=0; i<8; i++) - { - if(uni_Light[i].Enabled) - { - vec3 lightDirection = vec3(0.0f); - float atten; - - // Directional light - if(uni_Light[i].Position[3] == 0.0f) - { - lightDirection = uni_Light[i].Position.xyz; - atten = 1.0f; - } - // Point light - else - { - vec3 lightDirection = normalize(uni_Light[i].Position.xyz - data.Position.xyz); - float dist = distance(uni_Light[i].Position.xyz, data.Position.xyz); - - atten = 1.0f / (uni_Light[i].Attenuation.x - + uni_Light[i].Attenuation.y * dist - + uni_Light[i].Attenuation.z * dist * dist); - } - - vec3 reflectDirection = -reflect(lightDirection, normal); - - ambient += uni_Light[i].Ambient; - diffuse += atten * clamp(dot(normal, lightDirection), 0.0f, 1.0f) * uni_Light[i].Diffuse; - specular += atten * clamp(pow(dot(normal, lightDirection + reflectDirection), 10.0f), 0.0f, 1.0f) * uni_Light[i].Specular; - } - } - - vec4 result = uni_AmbientColor * ambient - + uni_DiffuseColor * diffuse - + uni_SpecularColor * specular; - - color.rgb = min(vec3(1.0f), result.rgb); - color.a = 1.0f; //min(1.0f, 1.0f); - } - - if (uni_PrimaryTextureEnabled) - { - color = color * texture(uni_PrimaryTexture, data.TexCoord0); - } - - if (uni_SecondaryTextureEnabled) - { - color = color * texture(uni_SecondaryTexture, data.TexCoord1); - } - - if (uni_ShadowTextureEnabled) - { - color = color * mix(uni_ShadowColor, 1.0f, texture(uni_ShadowTexture, data.ShadowCoord.xyz)); - } - - if (uni_FogEnabled) - { - float interpolate = (data.Distance - uni_FogRange.x) / (uni_FogRange.y - uni_FogRange.x); - - color = mix(color, uni_FogColor, clamp(interpolate, 0.0f, 1.0f)); - } - - if (uni_AlphaTestEnabled) - { - if(color.a < uni_AlphaReference) - discard; - } - - out_FragColor = color; -} diff --git a/src/graphics/opengl/shaders/fragment_shader_33_interface.glsl b/src/graphics/opengl/shaders/gl33/fs_interface.glsl similarity index 96% rename from src/graphics/opengl/shaders/fragment_shader_33_interface.glsl rename to src/graphics/opengl/shaders/gl33/fs_interface.glsl index 6d64f4dd..9b99bcff 100644 --- a/src/graphics/opengl/shaders/fragment_shader_33_interface.glsl +++ b/src/graphics/opengl/shaders/gl33/fs_interface.glsl @@ -17,7 +17,7 @@ * along with this program. If not, see http://gnu.org/licenses */ -// FRAGMENT SHADER - INTERFACE RENDERING +// FRAGMENT SHADER - INTERFACE MODE #version 330 core uniform sampler2D uni_Texture; diff --git a/src/graphics/opengl/shaders/fragment_shader_33_pervertex.glsl b/src/graphics/opengl/shaders/gl33/fs_normal.glsl similarity index 98% rename from src/graphics/opengl/shaders/fragment_shader_33_pervertex.glsl rename to src/graphics/opengl/shaders/gl33/fs_normal.glsl index 89df06bc..200aadef 100644 --- a/src/graphics/opengl/shaders/fragment_shader_33_pervertex.glsl +++ b/src/graphics/opengl/shaders/gl33/fs_normal.glsl @@ -17,7 +17,7 @@ * along with this program. If not, see http://gnu.org/licenses */ -// FRAGMENT SHADER - PER-VERTEX LIGHTING +// FRAGMENT SHADER - NORMAL MODE #version 330 core uniform sampler2D uni_PrimaryTexture; diff --git a/src/graphics/opengl/shaders/fragment_shader_33_shadow.glsl b/src/graphics/opengl/shaders/gl33/fs_shadow.glsl similarity index 97% rename from src/graphics/opengl/shaders/fragment_shader_33_shadow.glsl rename to src/graphics/opengl/shaders/gl33/fs_shadow.glsl index 6f895e1a..fb344ee8 100644 --- a/src/graphics/opengl/shaders/fragment_shader_33_shadow.glsl +++ b/src/graphics/opengl/shaders/gl33/fs_shadow.glsl @@ -17,7 +17,7 @@ * along with this program. If not, see http://gnu.org/licenses */ -// FRAGMENT SHADER - SHADOW RENDERING +// FRAGMENT SHADER - SHADOW MODE #version 330 core uniform sampler2D uni_Texture; diff --git a/src/graphics/opengl/shaders/vertex_shader_33_interface.glsl b/src/graphics/opengl/shaders/gl33/vs_interface.glsl similarity index 97% rename from src/graphics/opengl/shaders/vertex_shader_33_interface.glsl rename to src/graphics/opengl/shaders/gl33/vs_interface.glsl index 1bf68455..c223a131 100644 --- a/src/graphics/opengl/shaders/vertex_shader_33_interface.glsl +++ b/src/graphics/opengl/shaders/gl33/vs_interface.glsl @@ -17,7 +17,7 @@ * along with this program. If not, see http://gnu.org/licenses */ -// VERTEX SHADER - INTERFACE RENDERING +// VERTEX SHADER - INTERFACE MODE #version 330 core uniform mat4 uni_ProjectionMatrix; diff --git a/src/graphics/opengl/shaders/vertex_shader_33_pervertex.glsl b/src/graphics/opengl/shaders/gl33/vs_normal.glsl similarity index 99% rename from src/graphics/opengl/shaders/vertex_shader_33_pervertex.glsl rename to src/graphics/opengl/shaders/gl33/vs_normal.glsl index 6d95109b..2c1b5bc6 100644 --- a/src/graphics/opengl/shaders/vertex_shader_33_pervertex.glsl +++ b/src/graphics/opengl/shaders/gl33/vs_normal.glsl @@ -17,7 +17,7 @@ * along with this program. If not, see http://gnu.org/licenses */ -// VERTEX SHADER - PER-VERTEX LIGHTING +// VERTEX SHADER - NORMAL MODE #version 330 core struct LightParams diff --git a/src/graphics/opengl/shaders/vertex_shader_33_shadow.glsl b/src/graphics/opengl/shaders/gl33/vs_shadow.glsl similarity index 97% rename from src/graphics/opengl/shaders/vertex_shader_33_shadow.glsl rename to src/graphics/opengl/shaders/gl33/vs_shadow.glsl index 18e31bd8..02054c9a 100644 --- a/src/graphics/opengl/shaders/vertex_shader_33_shadow.glsl +++ b/src/graphics/opengl/shaders/gl33/vs_shadow.glsl @@ -17,7 +17,7 @@ * along with this program. If not, see http://gnu.org/licenses */ -// VERTEX SHADER - SHADOW RENDERING +// VERTEX SHADER - SHADOW MODE #version 330 core uniform mat4 uni_ProjectionMatrix; diff --git a/src/graphics/opengl/shaders/vertex_shader_33_perpixel.glsl b/src/graphics/opengl/shaders/vertex_shader_33_perpixel.glsl deleted file mode 100644 index 177e9ef1..00000000 --- a/src/graphics/opengl/shaders/vertex_shader_33_perpixel.glsl +++ /dev/null @@ -1,61 +0,0 @@ -/* - * This file is part of the Colobot: Gold Edition source code - * Copyright (C) 2001-2014, Daniel Roux, EPSITEC SA & TerranovaTeam - * http://epsitec.ch; http://colobot.info; http://github.com/colobot - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see http://gnu.org/licenses - */ - -// VERTEX SHADER -#version 330 - -uniform mat4 uni_ProjectionMatrix; -uniform mat4 uni_ViewMatrix; -uniform mat4 uni_ModelMatrix; -uniform mat4 uni_ShadowMatrix; -uniform mat4 uni_NormalMatrix; - -layout(location = 0) in vec4 in_VertexCoord; -layout(location = 1) in vec3 in_Normal; -layout(location = 2) in vec4 in_Color; -layout(location = 3) in vec2 in_TexCoord0; -layout(location = 4) in vec2 in_TexCoord1; - -out VertexData -{ - vec3 Normal; - vec4 Color; - vec2 TexCoord0; - vec2 TexCoord1; - vec4 ShadowCoord; - vec4 Position; - float Distance; -} data; - -void main() -{ - vec4 position = uni_ModelMatrix * in_VertexCoord; - vec4 eyeSpace = uni_ViewMatrix * position; - gl_Position = uni_ProjectionMatrix * eyeSpace; - - vec3 normal = normalize((uni_NormalMatrix * vec4(in_Normal, 0.0f)).xyz); - - data.Color = in_Color; - data.Normal = normal; - data.TexCoord0 = in_TexCoord0; - data.TexCoord1 = in_TexCoord1; - data.ShadowCoord = uni_ShadowMatrix * position; - data.Position = position; - data.Distance = abs(eyeSpace.z); -}