From d16a236937bef6ec5316502f6627e8c40b0a7fd8 Mon Sep 17 00:00:00 2001 From: "Anis A. Hireche" Date: Tue, 2 Dec 2014 00:48:03 +0100 Subject: [PATCH] ribbon_opengl --- Templates/Empty/game/art/ribbons/materials.cs | 39 +++++++++++++++++++ .../common/ribbons/gl/basicRibbonShaderP.glsl | 20 ++++++++++ .../common/ribbons/gl/basicRibbonShaderV.glsl | 37 ++++++++++++++++++ .../common/ribbons/gl/texRibbonShaderP.glsl | 22 +++++++++++ .../common/ribbons/gl/texRibbonShaderV.glsl | 37 ++++++++++++++++++ Templates/Full/game/art/ribbons/materials.cs | 12 +++++- .../common/ribbons/gl/basicRibbonShaderP.glsl | 20 ++++++++++ .../common/ribbons/gl/basicRibbonShaderV.glsl | 37 ++++++++++++++++++ .../common/ribbons/gl/texRibbonShaderP.glsl | 22 +++++++++++ .../common/ribbons/gl/texRibbonShaderV.glsl | 37 ++++++++++++++++++ 10 files changed, 282 insertions(+), 1 deletion(-) create mode 100644 Templates/Empty/game/shaders/common/ribbons/gl/basicRibbonShaderP.glsl create mode 100644 Templates/Empty/game/shaders/common/ribbons/gl/basicRibbonShaderV.glsl create mode 100644 Templates/Empty/game/shaders/common/ribbons/gl/texRibbonShaderP.glsl create mode 100644 Templates/Empty/game/shaders/common/ribbons/gl/texRibbonShaderV.glsl create mode 100644 Templates/Full/game/shaders/common/ribbons/gl/basicRibbonShaderP.glsl create mode 100644 Templates/Full/game/shaders/common/ribbons/gl/basicRibbonShaderV.glsl create mode 100644 Templates/Full/game/shaders/common/ribbons/gl/texRibbonShaderP.glsl create mode 100644 Templates/Full/game/shaders/common/ribbons/gl/texRibbonShaderV.glsl diff --git a/Templates/Empty/game/art/ribbons/materials.cs b/Templates/Empty/game/art/ribbons/materials.cs index d53ada9e2..9eacadb65 100644 --- a/Templates/Empty/game/art/ribbons/materials.cs +++ b/Templates/Empty/game/art/ribbons/materials.cs @@ -29,6 +29,11 @@ new ShaderData( BasicRibbonShader ) DXVertexShaderFile = "shaders/common/ribbons/basicRibbonShaderV.hlsl"; DXPixelShaderFile = "shaders/common/ribbons/basicRibbonShaderP.hlsl"; + OGLVertexShaderFile = "shaders/common/ribbons/gl/basicRibbonShaderV.glsl"; + OGLPixelShaderFile = "shaders/common/ribbons/gl/basicRibbonShaderP.glsl"; + + samplerNames[0] = "$ribTex"; + pixVersion = 2.0; }; @@ -44,5 +49,39 @@ singleton CustomMaterial( BasicRibbonMat ) BlendOp = AddAlpha; translucentBlendOp = AddAlpha; + preload = true; +}; + +// This material can render a texture on top of a ribbon. + +//Texture ribbon shader///////////////////////////////////////////// + +new ShaderData( TexturedRibbonShader ) +{ + DXVertexShaderFile = "shaders/common/ribbons/texRibbonShaderV.hlsl"; + DXPixelShaderFile = "shaders/common/ribbons/texRibbonShaderP.hlsl"; + + OGLVertexShaderFile = "shaders/common/ribbons/gl/texRibbonShaderV.glsl"; + OGLPixelShaderFile = "shaders/common/ribbons/gl/texRibbonShaderP.glsl"; + + samplerNames[0] = "$ribTex"; + + pixVersion = 2.0; +}; + +singleton CustomMaterial( TexturedRibbonMat ) +{ + shader = TexturedRibbonShader; + version = 2.0; + + emissive[0] = true; + + doubleSided = true; + translucent = true; + BlendOp = AddAlpha; + translucentBlendOp = AddAlpha; + + sampler["ribTex"] = "art/ribbons/ribTex.png"; + preload = true; }; \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/ribbons/gl/basicRibbonShaderP.glsl b/Templates/Empty/game/shaders/common/ribbons/gl/basicRibbonShaderP.glsl new file mode 100644 index 000000000..f3f83ce30 --- /dev/null +++ b/Templates/Empty/game/shaders/common/ribbons/gl/basicRibbonShaderP.glsl @@ -0,0 +1,20 @@ +#include "../../gl/hlslCompat.glsl" + +in float4 _hpos; +in float2 _texCoord; +in float2 _shiftdata; +in float4 _color; + +#define IN_hpos _hpos +#define IN_texCoord _texCoord +#define IN_shiftdata _shiftdata +#define IN_color _color + +out float4 OUT_col; + +void main() +{ + float fade = 1.0 - abs(IN_shiftdata.y - 0.5) * 2.0; + OUT_col.xyz = IN_color.xyz + pow(fade, 4) / 10; + OUT_col.a = IN_color.a * fade; +} \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/ribbons/gl/basicRibbonShaderV.glsl b/Templates/Empty/game/shaders/common/ribbons/gl/basicRibbonShaderV.glsl new file mode 100644 index 000000000..9f6826d55 --- /dev/null +++ b/Templates/Empty/game/shaders/common/ribbons/gl/basicRibbonShaderV.glsl @@ -0,0 +1,37 @@ +#include "../../gl/hlslCompat.glsl" + +in float2 vTexCoord0; +in float2 vTexCoord1; +in float3 vNormal; +in float4 vPosition; +in float4 vColor; + +#define IN_texCoord vTexCoord0 +#define IN_shiftdata vTexCoord1 +#define IN_normal vNormal +#define IN_position vPosition +#define IN_color vColor + +out float4 _hpos; +out float2 _texCoord; +out float2 _shiftdata; +out float4 _color; + +#define OUT_hpos _hpos +#define OUT_texCoord _texCoord +#define OUT_shiftdata _shiftdata +#define OUT_color _color + +uniform float4x4 modelview; +uniform float3 eyePos; + +void main() +{ + OUT_hpos = tMul(modelview, IN_position); + OUT_color = IN_color; + OUT_texCoord = IN_texCoord; + OUT_shiftdata = IN_shiftdata; + + gl_Position = OUT_hpos; + correctSSP(gl_Position); +} \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/ribbons/gl/texRibbonShaderP.glsl b/Templates/Empty/game/shaders/common/ribbons/gl/texRibbonShaderP.glsl new file mode 100644 index 000000000..cd3e72d43 --- /dev/null +++ b/Templates/Empty/game/shaders/common/ribbons/gl/texRibbonShaderP.glsl @@ -0,0 +1,22 @@ +#include "../../gl/hlslCompat.glsl" +#include "../../gl/torque.glsl" + +in float4 _hpos; +in float2 _texCoord; +in float2 _shiftdata; +in float4 _color; + +#define IN_hpos _hpos +#define IN_texCoord _texCoord +#define IN_shiftdata _shiftdata +#define IN_color _color + +out float4 OUT_col; +uniform sampler2D ribTex; + +void main() +{ + float4 Tex = tex2D(ribTex,IN_texCoord); + Tex.a *= IN_color.a; + OUT_col = hdrEncode(Tex); +} \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/ribbons/gl/texRibbonShaderV.glsl b/Templates/Empty/game/shaders/common/ribbons/gl/texRibbonShaderV.glsl new file mode 100644 index 000000000..9f6826d55 --- /dev/null +++ b/Templates/Empty/game/shaders/common/ribbons/gl/texRibbonShaderV.glsl @@ -0,0 +1,37 @@ +#include "../../gl/hlslCompat.glsl" + +in float2 vTexCoord0; +in float2 vTexCoord1; +in float3 vNormal; +in float4 vPosition; +in float4 vColor; + +#define IN_texCoord vTexCoord0 +#define IN_shiftdata vTexCoord1 +#define IN_normal vNormal +#define IN_position vPosition +#define IN_color vColor + +out float4 _hpos; +out float2 _texCoord; +out float2 _shiftdata; +out float4 _color; + +#define OUT_hpos _hpos +#define OUT_texCoord _texCoord +#define OUT_shiftdata _shiftdata +#define OUT_color _color + +uniform float4x4 modelview; +uniform float3 eyePos; + +void main() +{ + OUT_hpos = tMul(modelview, IN_position); + OUT_color = IN_color; + OUT_texCoord = IN_texCoord; + OUT_shiftdata = IN_shiftdata; + + gl_Position = OUT_hpos; + correctSSP(gl_Position); +} \ No newline at end of file diff --git a/Templates/Full/game/art/ribbons/materials.cs b/Templates/Full/game/art/ribbons/materials.cs index a8ebc4a61..9eacadb65 100644 --- a/Templates/Full/game/art/ribbons/materials.cs +++ b/Templates/Full/game/art/ribbons/materials.cs @@ -29,6 +29,11 @@ new ShaderData( BasicRibbonShader ) DXVertexShaderFile = "shaders/common/ribbons/basicRibbonShaderV.hlsl"; DXPixelShaderFile = "shaders/common/ribbons/basicRibbonShaderP.hlsl"; + OGLVertexShaderFile = "shaders/common/ribbons/gl/basicRibbonShaderV.glsl"; + OGLPixelShaderFile = "shaders/common/ribbons/gl/basicRibbonShaderP.glsl"; + + samplerNames[0] = "$ribTex"; + pixVersion = 2.0; }; @@ -55,7 +60,12 @@ new ShaderData( TexturedRibbonShader ) { DXVertexShaderFile = "shaders/common/ribbons/texRibbonShaderV.hlsl"; DXPixelShaderFile = "shaders/common/ribbons/texRibbonShaderP.hlsl"; - + + OGLVertexShaderFile = "shaders/common/ribbons/gl/texRibbonShaderV.glsl"; + OGLPixelShaderFile = "shaders/common/ribbons/gl/texRibbonShaderP.glsl"; + + samplerNames[0] = "$ribTex"; + pixVersion = 2.0; }; diff --git a/Templates/Full/game/shaders/common/ribbons/gl/basicRibbonShaderP.glsl b/Templates/Full/game/shaders/common/ribbons/gl/basicRibbonShaderP.glsl new file mode 100644 index 000000000..f3f83ce30 --- /dev/null +++ b/Templates/Full/game/shaders/common/ribbons/gl/basicRibbonShaderP.glsl @@ -0,0 +1,20 @@ +#include "../../gl/hlslCompat.glsl" + +in float4 _hpos; +in float2 _texCoord; +in float2 _shiftdata; +in float4 _color; + +#define IN_hpos _hpos +#define IN_texCoord _texCoord +#define IN_shiftdata _shiftdata +#define IN_color _color + +out float4 OUT_col; + +void main() +{ + float fade = 1.0 - abs(IN_shiftdata.y - 0.5) * 2.0; + OUT_col.xyz = IN_color.xyz + pow(fade, 4) / 10; + OUT_col.a = IN_color.a * fade; +} \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/ribbons/gl/basicRibbonShaderV.glsl b/Templates/Full/game/shaders/common/ribbons/gl/basicRibbonShaderV.glsl new file mode 100644 index 000000000..9f6826d55 --- /dev/null +++ b/Templates/Full/game/shaders/common/ribbons/gl/basicRibbonShaderV.glsl @@ -0,0 +1,37 @@ +#include "../../gl/hlslCompat.glsl" + +in float2 vTexCoord0; +in float2 vTexCoord1; +in float3 vNormal; +in float4 vPosition; +in float4 vColor; + +#define IN_texCoord vTexCoord0 +#define IN_shiftdata vTexCoord1 +#define IN_normal vNormal +#define IN_position vPosition +#define IN_color vColor + +out float4 _hpos; +out float2 _texCoord; +out float2 _shiftdata; +out float4 _color; + +#define OUT_hpos _hpos +#define OUT_texCoord _texCoord +#define OUT_shiftdata _shiftdata +#define OUT_color _color + +uniform float4x4 modelview; +uniform float3 eyePos; + +void main() +{ + OUT_hpos = tMul(modelview, IN_position); + OUT_color = IN_color; + OUT_texCoord = IN_texCoord; + OUT_shiftdata = IN_shiftdata; + + gl_Position = OUT_hpos; + correctSSP(gl_Position); +} \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/ribbons/gl/texRibbonShaderP.glsl b/Templates/Full/game/shaders/common/ribbons/gl/texRibbonShaderP.glsl new file mode 100644 index 000000000..cd3e72d43 --- /dev/null +++ b/Templates/Full/game/shaders/common/ribbons/gl/texRibbonShaderP.glsl @@ -0,0 +1,22 @@ +#include "../../gl/hlslCompat.glsl" +#include "../../gl/torque.glsl" + +in float4 _hpos; +in float2 _texCoord; +in float2 _shiftdata; +in float4 _color; + +#define IN_hpos _hpos +#define IN_texCoord _texCoord +#define IN_shiftdata _shiftdata +#define IN_color _color + +out float4 OUT_col; +uniform sampler2D ribTex; + +void main() +{ + float4 Tex = tex2D(ribTex,IN_texCoord); + Tex.a *= IN_color.a; + OUT_col = hdrEncode(Tex); +} \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/ribbons/gl/texRibbonShaderV.glsl b/Templates/Full/game/shaders/common/ribbons/gl/texRibbonShaderV.glsl new file mode 100644 index 000000000..9f6826d55 --- /dev/null +++ b/Templates/Full/game/shaders/common/ribbons/gl/texRibbonShaderV.glsl @@ -0,0 +1,37 @@ +#include "../../gl/hlslCompat.glsl" + +in float2 vTexCoord0; +in float2 vTexCoord1; +in float3 vNormal; +in float4 vPosition; +in float4 vColor; + +#define IN_texCoord vTexCoord0 +#define IN_shiftdata vTexCoord1 +#define IN_normal vNormal +#define IN_position vPosition +#define IN_color vColor + +out float4 _hpos; +out float2 _texCoord; +out float2 _shiftdata; +out float4 _color; + +#define OUT_hpos _hpos +#define OUT_texCoord _texCoord +#define OUT_shiftdata _shiftdata +#define OUT_color _color + +uniform float4x4 modelview; +uniform float3 eyePos; + +void main() +{ + OUT_hpos = tMul(modelview, IN_position); + OUT_color = IN_color; + OUT_texCoord = IN_texCoord; + OUT_shiftdata = IN_shiftdata; + + gl_Position = OUT_hpos; + correctSSP(gl_Position); +} \ No newline at end of file