ソースを参照

Merge pull request #1003 from Lopuska/ribbon_opengl

Ribbon port for opengl
LuisAntonRebollo 10 年 前
コミット
c20f29c672

+ 39 - 0
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;
 };

+ 20 - 0
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;
+}

+ 37 - 0
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);
+}

+ 22 - 0
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);
+}

+ 37 - 0
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);
+}

+ 11 - 1
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;
 };
  

+ 20 - 0
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;
+}

+ 37 - 0
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);
+}

+ 22 - 0
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);
+}

+ 37 - 0
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);
+}