[colobot] 369/390: Move OpenGL 3.3 shaders to main repository
Didier Raboud
odyx at moszumanska.debian.org
Fri Jun 12 14:22:06 UTC 2015
This is an automated email from the git hooks/post-receive script.
odyx pushed a commit to branch upstream/latest
in repository colobot.
commit b1e83414750831a8759221d075b8bc248e8dd74b
Author: Piotr Dziwinski <piotrdz at gmail.com>
Date: Wed May 20 23:29:41 2015 +0200
Move OpenGL 3.3 shaders to main repository
---
data | 2 +-
src/CMakeLists.txt | 2 +
src/graphics/opengl/shaders/CMakeLists.txt | 2 +
.../opengl/shaders/fragment_shader_33.glsl | 155 +++++++++++++++++++++
src/graphics/opengl/shaders/vertex_shader_33.glsl | 63 +++++++++
5 files changed, 223 insertions(+), 1 deletion(-)
diff --git a/data b/data
index 2cbfc1b..7696ffe 160000
--- a/data
+++ b/data
@@ -1 +1 @@
-Subproject commit 2cbfc1baf2086d1a2ab28bfcfaccce73c1dbb2d4
+Subproject commit 7696ffe209feea809f10598d97b7c1a34e511875
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 12de291..b10b63b 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -12,6 +12,8 @@ if(TOOLS)
add_subdirectory(tools)
endif()
+add_subdirectory(graphics/opengl/shaders)
+
# Optional libraries
set(OPTIONAL_LIBS "")
diff --git a/src/graphics/opengl/shaders/CMakeLists.txt b/src/graphics/opengl/shaders/CMakeLists.txt
new file mode 100644
index 0000000..a32d6a9
--- /dev/null
+++ b/src/graphics/opengl/shaders/CMakeLists.txt
@@ -0,0 +1,2 @@
+file(GLOB shaders *.glsl)
+install(FILES ${shaders} DESTINATION ${COLOBOT_INSTALL_DATA_DIR}/shaders)
diff --git a/src/graphics/opengl/shaders/fragment_shader_33.glsl b/src/graphics/opengl/shaders/fragment_shader_33.glsl
new file mode 100644
index 0000000..a2ef596
--- /dev/null
+++ b/src/graphics/opengl/shaders/fragment_shader_33.glsl
@@ -0,0 +1,155 @@
+/*
+ * This file is part of the Colobot: Gold Edition source code
+ * Copyright (C) 2001-2014, Daniel Roux, EPSITEC SA & TerranovaTeam
+ * http://epsiteс.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 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 NormalSmooth;
+ flat vec3 NormalFlat;
+ 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);
+
+ for(int i=0; i<8; i++)
+ {
+ if(uni_Light[i].Enabled)
+ {
+ ambient += uni_Light[i].Ambient;
+
+ vec3 normal = (uni_SmoothShading ? data.NormalSmooth : data.NormalFlat);
+ normal = (gl_FrontFacing ? normal : -normal);
+
+ 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);
+
+ 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 * (0.35f + 0.65f * 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/vertex_shader_33.glsl b/src/graphics/opengl/shaders/vertex_shader_33.glsl
new file mode 100644
index 0000000..97dbc17
--- /dev/null
+++ b/src/graphics/opengl/shaders/vertex_shader_33.glsl
@@ -0,0 +1,63 @@
+/*
+ * This file is part of the Colobot: Gold Edition source code
+ * Copyright (C) 2001-2014, Daniel Roux, EPSITEC SA & TerranovaTeam
+ * http://epsiteс.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 NormalSmooth;
+ flat vec3 NormalFlat;
+ 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.NormalSmooth = normal;
+ data.NormalFlat = normal;
+ data.TexCoord0 = in_TexCoord0;
+ data.TexCoord1 = in_TexCoord1;
+ data.ShadowCoord = uni_ShadowMatrix * position;
+ data.Position = position;
+ data.Distance = abs(eyeSpace.z);
+}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git
More information about the Pkg-games-commits
mailing list