From c4390ae31a8aebd55258a7994bf87d0d20379a83 Mon Sep 17 00:00:00 2001 From: Frederic Bouvier <fredfgfs01@free.fr> Date: Sun, 25 Mar 2012 19:03:52 +0200 Subject: [PATCH] Change default effects attached to terrain and models Add a technique that initialize the buffers of the Rembrandt renderer (use Multi Render Target) Renumber techniques that depends on old technique 10 (now 11) of model-default --- Effects/bowwave.eff | 2 +- Effects/bumpspec.eff | 2 +- Effects/model-combined.eff | 2 +- Effects/model-default.eff | 73 ++++++++++++++++++++++++++++++++++- Effects/terrain-default.eff | 71 +++++++++++++++++++++++++++++++++- Shaders/deferred-gbuffer.frag | 21 ++++++++++ Shaders/deferred-gbuffer.vert | 13 +++++++ 7 files changed, 178 insertions(+), 6 deletions(-) create mode 100644 Shaders/deferred-gbuffer.frag create mode 100644 Shaders/deferred-gbuffer.vert diff --git a/Effects/bowwave.eff b/Effects/bowwave.eff index 3a388555d..f0d0ebddc 100644 --- a/Effects/bowwave.eff +++ b/Effects/bowwave.eff @@ -492,7 +492,7 @@ <!-- END fog include --> </pass> </technique> - <technique n="10"> + <technique n="11"> <!-- FIXME: this technique number overlaps the one in model-default --> <predicate> <and> <property>/sim/rendering/shaders/water</property> diff --git a/Effects/bumpspec.eff b/Effects/bumpspec.eff index 032f5e816..ed49fbbfb 100644 --- a/Effects/bumpspec.eff +++ b/Effects/bumpspec.eff @@ -34,7 +34,7 @@ in Aircraft/A320/Models/Effects/a320_bumpspec.eff ( or whatever, private to the <tangent type="int">6</tangent> <binormal type="int">7</binormal> </generate> - <technique n="10"> + <technique n="11"> <!-- This number should be the same than the second technique in model-default --> <predicate> <and> <property>/sim/rendering/shaders/model</property> diff --git a/Effects/model-combined.eff b/Effects/model-combined.eff index 7c67b4fd5..efa3be3c6 100644 --- a/Effects/model-combined.eff +++ b/Effects/model-combined.eff @@ -148,7 +148,7 @@ please see Docs/README.model-combined.eff for documentation <binormal type="int">7</binormal> </generate>--> - <technique n="10"> + <technique n="11"> <!-- FIXME: this technique number overlaps the one in model-default --> <predicate> <and> <property>/sim/rendering/shaders/model</property> diff --git a/Effects/model-default.eff b/Effects/model-default.eff index d2e313cf4..dea9819fc 100644 --- a/Effects/model-default.eff +++ b/Effects/model-default.eff @@ -11,6 +11,7 @@ <color-mode-uniform>1</color-mode-uniform> <!-- DIFFUSE --> </material> + <material-id>0</material-id> <!-- BEGIN fog include --> <visibility> <use>/environment/ground-visibility-m</use> @@ -131,7 +132,75 @@ </pass> </technique> - <technique n="10"> +<technique n="10"> + <predicate> + <and> + <property>/sim/rendering/rembrandt</property> + <or> + <less-equal> + <value type="float">2.0</value> + <glversion/> + </less-equal> + <and> + <extension-supported>GL_ARB_shader_objects</extension-supported> + <extension-supported>GL_ARB_shading_language_100</extension-supported> + <extension-supported>GL_ARB_vertex_shader</extension-supported> + <extension-supported>GL_ARB_fragment_shader</extension-supported> + </and> + </or> + <extension-supported>GL_EXT_gpu_shader4</extension-supported> + <extension-supported>GL_ARB_texture_rg</extension-supported> + </and> + </predicate> + <pass> + <lighting>false</lighting> + <material> + <ambient><use>material/ambient</use></ambient> + <diffuse><use>material/diffuse</use></diffuse> + <specular><use>material/specular</use></specular> + <emissive><use>material/emissive</use></emissive> + <shininess><use>material/shininess</use></shininess> + <color-mode>ambient-and-diffuse</color-mode> + </material> + <blend>false</blend> + <alpha-test>true</alpha-test> + <shade-model>smooth</shade-model> + <cull-face>back</cull-face> + <render-bin> + <bin-number>1</bin-number> + <bin-name>RenderBin</bin-name> + </render-bin> + <texture-unit> + <unit>0</unit> + <image><use>texture[0]/image</use></image> + <filter><use>texture[0]/filter</use></filter> + <wrap-s><use>texture[0]/wrap-s</use></wrap-s> + <wrap-t><use>texture[0]/wrap-t</use></wrap-t> + <internal-format> + <use>texture[0]/internal-format</use> + </internal-format> + <environment> + <mode>modulate</mode> + </environment> + </texture-unit> + <program> + <vertex-shader>Shaders/deferred-gbuffer.vert</vertex-shader> + <fragment-shader>Shaders/deferred-gbuffer.frag</fragment-shader> + </program> + <uniform> + <name>texture</name> + <type>sampler-2d</type> + <value type="int">0</value> + </uniform> + <!-- uniform> + <name>materialID</name> + <type>int</type> + <value><use>material-id</use></value> + </uniform --> + </pass> +</technique> + + <technique n="11"> <predicate> <and> <property>/sim/rendering/shaders/generic</property> @@ -290,7 +359,7 @@ </uniform> </pass> </technique> - <technique n="11"> + <technique n="12"> <pass> <lighting>true</lighting> <material> diff --git a/Effects/terrain-default.eff b/Effects/terrain-default.eff index d4f259abc..4de6ce0fa 100644 --- a/Effects/terrain-default.eff +++ b/Effects/terrain-default.eff @@ -35,6 +35,7 @@ <bin-number>0</bin-number> <bin-name>RenderBin</bin-name> </render-bin> + <material-id>0</material-id> <visibility><use>/environment/ground-visibility-m</use></visibility> <avisibility><use>/environment/visibility-m</use></avisibility> <lthickness><use>/environment/ground-haze-thickness-m</use></lthickness> @@ -195,6 +196,74 @@ </technique> <technique n="10"> + <predicate> + <and> + <property>/sim/rendering/rembrandt</property> + <or> + <less-equal> + <value type="float">2.0</value> + <glversion/> + </less-equal> + <and> + <extension-supported>GL_ARB_shader_objects</extension-supported> + <extension-supported>GL_ARB_shading_language_100</extension-supported> + <extension-supported>GL_ARB_vertex_shader</extension-supported> + <extension-supported>GL_ARB_fragment_shader</extension-supported> + </and> + </or> + <extension-supported>GL_EXT_gpu_shader4</extension-supported> + <extension-supported>GL_ARB_texture_rg</extension-supported> + </and> + </predicate> + <pass> + <lighting>false</lighting> + <material> + <ambient><use>material/ambient</use></ambient> + <diffuse><use>material/diffuse</use></diffuse> + <specular><use>material/specular</use></specular> + <emissive><use>material/emissive</use></emissive> + <shininess><use>material/shininess</use></shininess> + <color-mode>ambient-and-diffuse</color-mode> + </material> + <blend>false</blend> + <alpha-test>true</alpha-test> + <shade-model>smooth</shade-model> + <cull-face>back</cull-face> + <render-bin> + <bin-number>1</bin-number> + <bin-name>RenderBin</bin-name> + </render-bin> + <texture-unit> + <unit>0</unit> + <image><use>texture[0]/image</use></image> + <filter><use>texture[0]/filter</use></filter> + <wrap-s><use>texture[0]/wrap-s</use></wrap-s> + <wrap-t><use>texture[0]/wrap-t</use></wrap-t> + <internal-format> + <use>texture[0]/internal-format</use> + </internal-format> + <environment> + <mode>modulate</mode> + </environment> + </texture-unit> + <program> + <vertex-shader>Shaders/deferred-gbuffer.vert</vertex-shader> + <fragment-shader>Shaders/deferred-gbuffer.frag</fragment-shader> + </program> + <uniform> + <name>texture</name> + <type>sampler-2d</type> + <value type="int">0</value> + </uniform> + <!-- uniform> + <name>materialID</name> + <type>int</type> + <value><use>material-id</use></value> + </uniform --> + </pass> +</technique> + +<technique n="11"> <predicate> <and> <property>/sim/rendering/shaders/generic</property> @@ -394,7 +463,7 @@ </technique> - <technique n="11"> + <technique n="12"> <pass> <lighting>true</lighting> <material> diff --git a/Shaders/deferred-gbuffer.frag b/Shaders/deferred-gbuffer.frag new file mode 100644 index 000000000..5f765347a --- /dev/null +++ b/Shaders/deferred-gbuffer.frag @@ -0,0 +1,21 @@ +#extension GL_EXT_gpu_shader4 : enable +// +// attachment 0: normal.x | normal.x | normal.y | normal.y +// attachment 1: diffuse.r | diffuse.g | diffuse.b | material Id +// attachment 2: specular.l | shininess | emission.l | unused +// +varying vec3 ecNormal; +varying vec4 color; +uniform int materialID; +uniform sampler2D texture; +void main() { + float specular = dot( gl_FrontMaterial.specular.rgb, vec3( 0.3, 0.59, 0.11 ) ); + float shininess = gl_FrontMaterial.shininess; + float emission = dot( gl_FrontLightModelProduct.sceneColor.rgb, vec3( 0.3, 0.59, 0.11 ) ); + vec4 texel = texture2D(texture, gl_TexCoord[0].st); + if (texel.a * color.a < 0.1) + discard; + gl_FragData[0] = vec4( ecNormal.xy, 0.0, 1.0 ); + gl_FragData[1] = vec4( color.rgb * texel.rgb, float( materialID ) / 255.0 ); + gl_FragData[2] = vec4( specular, shininess / 255.0, emission, 1.0 ); +} diff --git a/Shaders/deferred-gbuffer.vert b/Shaders/deferred-gbuffer.vert new file mode 100644 index 000000000..b517ab146 --- /dev/null +++ b/Shaders/deferred-gbuffer.vert @@ -0,0 +1,13 @@ +// +// attachment 0: normal.x | normal.x | normal.y | normal.y +// attachment 1: diffuse.r | diffuse.g | diffuse.b | material Id +// attachment 2: specular.l | shininess | emission.l | unused +// +varying vec3 ecNormal; +varying vec4 color; +void main() { + ecNormal = gl_NormalMatrix * gl_Normal; + gl_Position = ftransform(); + gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + color = gl_Color; +}