Prefix most shader defines with "OC_"

shapetextures
Armin Burgmeier 2015-09-10 19:44:23 -04:00
parent d98134332c
commit f3da8525d0
11 changed files with 31 additions and 41 deletions

View File

@ -1,7 +1,7 @@
// Ambient light calculation
#ifdef HAVE_LIGHT
#ifdef OC_DYNAMIC_LIGHT
uniform sampler2D ambientTex;
uniform mat3x2 ambientTransform;
@ -12,7 +12,7 @@ uniform float ambientBrightness;
slice(texture+6)
{
#ifdef HAVE_LIGHT
#ifdef OC_DYNAMIC_LIGHT
// Ambient light
// Extra .xy since some old intel drivers return a vec3
float ambient = texture2D(ambientTex, (ambientTransform * vec3(gl_FragCoord.xy, 1.0)).xy).r * ambientBrightness;
@ -25,11 +25,11 @@ slice(texture+6)
slice(light+1)
{
// Add ambience to brightness
#ifdef LANDSCAPE
#ifdef OC_LANDSCAPE
// For landscape, ambient brightness is coming from top
vec3 ambientDir = vec3(0.0, -1.0, 0.0);
light = mix(light, 1.0 + 1.0 * dot(normal, ambientDir), ambient);
#ifdef HAVE_2PX
#ifdef OC_HAVE_2PX
light2 = mix(light2, 1.0 + 1.0 * dot(normal2, ambientDir), ambient);
#endif
#else

View File

@ -74,7 +74,7 @@ slice(material)
vec4 normalPx = texture3D(materialTex, vec3(materialCoo, materialIx+0.5));
// Same for second pixel, but we'll simply use the first normal
#ifdef HAVE_2PX
#ifdef OC_HAVE_2PX
float materialIx2 = queryMatMap(f2i(landscapePx2.r));
vec4 materialPx2 = texture3D(materialTex, vec3(materialCoo, materialIx2));
vec4 normalPx2 = texture3D(materialTex, vec3(materialCoo, materialIx2+0.5));
@ -89,7 +89,7 @@ slice(normal)
vec3 textureNormal = normalPx.xyz - vec3(0.5,0.5,0.5);
normal = normal + textureNormal * normalMapStrength;
#ifdef HAVE_2PX
#ifdef OC_HAVE_2PX
vec3 normal2 = extend_normal(landscapePx2.yz - vec2(0.5, 0.5));
vec3 textureNormal2 = normalPx2.xyz - vec3(0.5,0.5,0.5);
normal2 = normal2 + textureNormal2 * normalMapStrength;
@ -100,7 +100,7 @@ slice(normal)
slice(color) {
#define color gl_FragColor
color = materialPx;
#ifdef HAVE_2PX
#ifdef OC_HAVE_2PX
vec4 color2 = materialPx2;
#endif
}

View File

@ -1,7 +1,7 @@
// Base light calculations
#ifdef HAVE_LIGHT
#ifdef OC_DYNAMIC_LIGHT
uniform sampler2D lightTex;
#endif
uniform float cullMode; // 0 if backface culling is enabled, 1 if it is disabled
@ -25,7 +25,7 @@ const float lightDarknessLevel = 8.0 / 256.0;
slice(texture+5)
{
#ifdef HAVE_LIGHT
#ifdef OC_DYNAMIC_LIGHT
// Query light texture
vec2 lightDirCoord = lightCoord.st;
@ -57,7 +57,7 @@ slice(texture+5)
slice(light)
{
float light = 2.0 * lightBright * max(max(dot(normal, lightDir), 0.0), cullMode * max(dot(-normal, lightDir), 0.0));
#ifdef HAVE_2PX
#ifdef OC_HAVE_2PX
float light2 = 2.0 * lightBright * max(max(dot(normal2, lightDir), 0.0), cullMode * max(dot(-normal2, lightDir), 0.0));
#endif
}
@ -73,7 +73,7 @@ slice(color+5)
// Add light
color.rgb = light * color.rgb * lightColor.rgb;
#ifdef HAVE_2PX
#ifdef OC_HAVE_2PX
color2.rgb = light2 * color2.rgb * lightColor.rgb;
#endif
}
@ -82,7 +82,7 @@ slice(finish+5)
{
#ifdef LIGHT_DEBUG
#ifdef HAVE_LIGHT
#ifdef OC_DYNAMIC_LIGHT
float lightYDir = lightPx.b - 1.0/3.0;
float lightXDir = lightPx.g - 1.0/3.0;
float lightStrength = lightPx.a;

View File

@ -4,7 +4,7 @@ slice(init)
{
#define color gl_FragColor
#ifdef MESH
#ifdef OC_MESH
// TODO: Add emission part of the material. Note we cannot just
// add this to the color, but it would need to be handled separately,
// such that it is independent from the incident light direction.
@ -27,7 +27,7 @@ slice(color)
// Could also try some sort of 3x3 matrix:
// out = (color, clrmod, 1) * (A,B,C,D,E,F,0,0,G) * (color, clrmod, 1)
#ifdef CLRMOD_MOD2
#ifdef OC_CLRMOD_MOD2
color = clamp(color + clrMod - 0.5, 0.0, 1.0);
#else
color = color * clrMod;

View File

@ -1,15 +1,15 @@
uniform mat3x2 lightTransform;
#ifdef HAVE_NORMALMAP
#ifdef OC_WITH_NORMALMAP
uniform sampler2D normalTex;
#endif
#ifdef MESH
#ifdef OC_MESH
varying vec3 normalDir;
#endif
slice(texture+4)
{
#ifdef HAVE_LIGHT
#ifdef OC_DYNAMIC_LIGHT
// prepare texture coordinate for light lookup in LightShader.c
// Extra .xy since some old intel drivers return a vec3
vec2 lightCoord = (lightTransform * vec3(gl_FragCoord.xy, 1.0)).xy;
@ -18,23 +18,12 @@ slice(texture+4)
slice(normal)
{
#ifdef HAVE_NORMALMAP
#ifdef OC_WITH_NORMALMAP
vec4 normalPx = texture2D(normalTex, texcoord.xy);
vec3 normalPxDir = 2.0 * (normalPx.xyz - vec3(0.5, 0.5, 0.5));
#ifdef MESH
// For meshes, the normal matrix is typically provided in Clonk
// coordinates, but the normal matrix incorporates a component that
// transforms from Ogre to Clonk coordinates. Therefore, we need to
// reverse that transformation for meshes.
// TODO: This could be optimized since the matrix is so simple that
// we don't need to do a full matrix multiplication.
mat3 c2o = mat3(0.0, 1.0, 0.0, 0.0, 0.0, -1.0, 1.0, 0.0, 0.0);
vec3 normal = normalize(c2o * gl_NormalMatrix * normalPxDir);
#else
vec3 normal = normalize(gl_NormalMatrix * normalPxDir);
#endif
#else
#ifdef MESH
#ifdef OC_MESH
vec3 normal = normalDir; // Normal matrix is already applied in vertex shader
#else
vec3 normal = vec3(0.0, 0.0, 1.0);

View File

@ -1,5 +1,5 @@
#define HAVE_2PX
#define OC_HAVE_2PX
slice(texture+5)
{

View File

@ -13,7 +13,7 @@ void main()
slice(init+1)
{
// This picks up the normal map lookup in ObjectLightShader.c:
#define HAVE_NORMALMAP
#define OC_WITH_NORMALMAP
color = color * texture2D(basemap, texcoord);

View File

@ -599,9 +599,9 @@ bool CStdGL::CreateSpriteShader(C4Shader& shader, const char* name, int ssc, C4G
// Then load slices for fragment shader
shader.AddFragmentSlice(-1, "#define OPENCLONK");
if (ssc & C4SSC_MOD2) shader.AddFragmentSlice(-1, "#define CLRMOD_MOD2");
if (ssc & C4SSC_NORMAL) shader.AddFragmentSlice(-1, "#define HAVE_NORMALMAP");
if (ssc & C4SSC_LIGHT) shader.AddFragmentSlice(-1, "#define HAVE_LIGHT");
if (ssc & C4SSC_MOD2) shader.AddFragmentSlice(-1, "#define OC_CLRMOD_MOD2");
if (ssc & C4SSC_NORMAL) shader.AddFragmentSlice(-1, "#define OC_WITH_NORMALMAP");
if (ssc & C4SSC_LIGHT) shader.AddFragmentSlice(-1, "#define OC_DYNAMIC_LIGHT");
shader.LoadSlices(pGroups, "UtilShader.glsl");
shader.LoadSlices(pGroups, "ObjectBaseShader.glsl");

View File

@ -537,8 +537,9 @@ bool C4LandscapeRenderGL::LoadShader(C4GroupSet *pGroups, C4Shader& shader, cons
if(ssc & C4SSC_LIGHT) hLightTexCoord = shader.AddTexCoord("lightCoord");
// Then load slices for fragment shader
shader.AddFragmentSlice(-1, "#define LANDSCAPE");
if(ssc & C4SSC_LIGHT) shader.AddFragmentSlice(-1, "#define HAVE_LIGHT"); // sample light from light texture
shader.AddFragmentSlice(-1, "#define OPENCLONK");
shader.AddFragmentSlice(-1, "#define OC_LANDSCAPE");
if(ssc & C4SSC_LIGHT) shader.AddFragmentSlice(-1, "#define OC_DYNAMIC_LIGHT"); // sample light from light texture
shader.LoadSlices(pGroups, "UtilShader.glsl");
shader.LoadSlices(pGroups, "LandscapeShader.glsl");

View File

@ -854,7 +854,7 @@ bool StdMeshMaterialProgram::AddParameterNames(const StdMeshMaterialShaderParame
bool StdMeshMaterialProgram::CompileShader(StdMeshMaterialLoader& loader, C4Shader& shader, int ssc)
{
// Add standard slices
shader.AddFragmentSlice(-1, "#define MESH");
shader.AddFragmentSlice(-1, "#define OC_MESH");
loader.AddShaderSlices(shader, ssc);
// Add our slices
shader.AddVertexSlice(-1, "varying vec2 texcoord;");

View File

@ -64,8 +64,8 @@ public:
shader.AddFragmentSlice(-1, "#define OPENCLONK");
shader.AddVertexSlice(-1, "#define OPENCLONK");
if (ssc & C4SSC_MOD2) shader.AddFragmentSlice(-1, "#define CLRMOD_MOD2");
if (ssc & C4SSC_LIGHT) shader.AddFragmentSlice(-1, "#define HAVE_LIGHT");
if (ssc & C4SSC_MOD2) shader.AddFragmentSlice(-1, "#define OC_CLRMOD_MOD2");
if (ssc & C4SSC_LIGHT) shader.AddFragmentSlice(-1, "#define OC_DYNAMIC_LIGHT");
shader.LoadSlices(&::GraphicsResource.Files, "UtilShader.glsl");
shader.LoadSlices(&::GraphicsResource.Files, "ObjectBaseShader.glsl");
@ -73,7 +73,7 @@ public:
shader.LoadSlices(&::GraphicsResource.Files, "GammaShader.glsl");
// Note that these shader slices are always loaded, even if lighting
// is disabled. The shaders then assume a default light if HAVE_LIGHT
// is disabled. The shaders then assume a default light if OC_DYNAMIC_LIGHT
// is not defined. This avoids completely flat shading for meshes
// that are shown as picture graphics for example.
shader.LoadSlices(&::GraphicsResource.Files, "ObjectLightShader.glsl");