| @@ -11,7 +11,7 @@ liblol_a_SOURCES = \ | |||
| timer.cpp timer.h bitfield.h profiler.cpp profiler.h \ | |||
| world.cpp world.h sample.cpp sample.h sampler.cpp sampler.h \ | |||
| text.cpp text.h emitter.cpp emitter.h numeric.h hash.cpp hash.h \ | |||
| worldentity.cpp worldentity.h gradient.cpp gradient.h \ | |||
| worldentity.cpp worldentity.h gradient.cpp gradient.h gradient.lolfx \ | |||
| platform.cpp platform.h sprite.cpp sprite.h camera.cpp camera.h \ | |||
| \ | |||
| lol/unit.h lol/debug.h \ | |||
| @@ -17,6 +17,8 @@ | |||
| using namespace std; | |||
| extern char const *lolfx_gradient; | |||
| namespace lol | |||
| { | |||
| @@ -74,99 +76,8 @@ void Gradient::TickDraw(float seconds) | |||
| if (!data->shader) | |||
| { | |||
| #if !defined __CELLOS_LV2__ && !defined USE_D3D9 && !defined _XBOX | |||
| data->shader = Shader::Create( | |||
| "#version 130\n" | |||
| "\n" | |||
| "in vec3 in_Vertex;\n" | |||
| "in vec4 in_Color;\n" | |||
| "out vec4 pass_Color;\n" | |||
| "\n" | |||
| "uniform mat4 proj_matrix;\n" | |||
| "uniform mat4 view_matrix;\n" | |||
| "uniform mat4 model_matrix;\n" | |||
| "\n" | |||
| "void main()\n" | |||
| "{\n" | |||
| " gl_Position = proj_matrix * view_matrix * model_matrix" | |||
| " * vec4(in_Vertex, 1.0);\n" | |||
| " pass_Color = in_Color;\n" | |||
| "}\n", | |||
| "#version 130\n" | |||
| "\n" | |||
| "in vec4 pass_Color;\n" | |||
| "\n" | |||
| "mat4 bayer = mat4( 0.0, 12.0, 3.0, 15.0," | |||
| " 8.0, 4.0, 11.0, 7.0," | |||
| " 2.0, 14.0, 1.0, 13.0," | |||
| " 10.0, 6.0, 9.0, 5.0);\n" | |||
| "" | |||
| "mat4 cluster = mat4(12.0, 5.0, 6.0, 13.0," | |||
| " 4.0, 0.0, 1.0, 7.0," | |||
| " 11.0, 3.0, 2.0, 8.0," | |||
| " 15.0, 10.0, 9.0, 14.0);\n" | |||
| "\n" | |||
| "void main()\n" | |||
| "{\n" | |||
| " vec4 col = pass_Color;\n" | |||
| " float t = cluster[int(mod(gl_FragCoord.x, 4.0))]" | |||
| " [int(mod(gl_FragCoord.y, 4.0))];\n" | |||
| " t = (t + 0.5) / 17.0;\n" | |||
| " col.x += fract(t - col.x) - t;\n" | |||
| " col.y += fract(t - col.y) - t;\n" | |||
| " col.z += fract(t - col.z) - t;\n" | |||
| " gl_FragColor = col;\n" | |||
| "}\n"); | |||
| #else | |||
| data->shader = Shader::Create( | |||
| "void main(float4 in_Vertex : POSITION," | |||
| " float4 in_Color : COLOR," | |||
| " uniform float4x4 proj_matrix," | |||
| " uniform float4x4 view_matrix," | |||
| " uniform float4x4 model_matrix," | |||
| " out float4 out_Color : COLOR," | |||
| " out float4 out_Position : POSITION)" | |||
| "{" | |||
| " out_Position = mul(proj_matrix, mul(view_matrix, mul(model_matrix, in_Vertex)));" | |||
| " out_Color = in_Color;" | |||
| "}", | |||
| "float4x4 bayer = float4x4( 0.0, 12.0, 3.0, 15.0," | |||
| " 8.0, 4.0, 11.0, 7.0," | |||
| " 2.0, 14.0, 1.0, 13.0," | |||
| " 10.0, 6.0, 9.0, 5.0);\n" | |||
| "" | |||
| #if 1 | |||
| "float4x4 cluster = float4x4(12.0, 5.0, 6.0, 13.0," | |||
| " 4.0, 0.0, 1.0, 7.0," | |||
| " 11.0, 3.0, 2.0, 8.0," | |||
| " 15.0, 10.0, 9.0, 14.0);\n" | |||
| #endif | |||
| "\n" | |||
| "void main(float4 in_Color : COLOR," | |||
| " float4 in_FragCoord : WPOS," | |||
| " out float4 out_FragColor : COLOR)" | |||
| "{" | |||
| " float4 col = in_Color;" | |||
| #if 1 | |||
| " int x = (int)in_FragCoord.x;" | |||
| " int y = (int)in_FragCoord.y;" | |||
| #if defined USE_D3D9 || defined _XBOX | |||
| " float t = bayer[int(frac(x * 0.25) * 4.0)]" | |||
| " [int(frac(y * 0.25) * 4.0)];\n" | |||
| #else | |||
| // FIXME: we cannot address this matrix directly on the PS3 | |||
| " float t = bayer[0][0];\n" | |||
| #endif | |||
| " t = (t + 0.5) / 17.0;\n" | |||
| " col.x += frac(t - col.x) - t;\n" | |||
| " col.y += frac(t - col.y) - t;\n" | |||
| " col.z += frac(t - col.z) - t;\n" | |||
| #endif | |||
| " out_FragColor = col;" | |||
| "}"); | |||
| #endif | |||
| data->shader = Shader::Create(lolfx_gradient); | |||
| data->m_vbo = new VertexBuffer(sizeof(vertex)); | |||
| data->m_cbo = new VertexBuffer(sizeof(color)); | |||
| @@ -0,0 +1,100 @@ | |||
| -- GLSL.Vert -- | |||
| #version 130 | |||
| attribute vec3 in_Vertex; | |||
| attribute vec4 in_Color; | |||
| varying vec4 pass_Color; | |||
| uniform mat4 proj_matrix; | |||
| uniform mat4 view_matrix; | |||
| uniform mat4 model_matrix; | |||
| void main() | |||
| { | |||
| gl_Position = proj_matrix * view_matrix * model_matrix | |||
| * vec4(in_Vertex, 1.0); | |||
| pass_Color = in_Color; | |||
| } | |||
| -- GLSL.Frag -- | |||
| #version 130 | |||
| #if defined GL_ES | |||
| precision highp float; | |||
| #endif | |||
| varying vec4 pass_Color; | |||
| mat4 bayer = mat4( 0.0, 12.0, 3.0, 15.0, | |||
| 8.0, 4.0, 11.0, 7.0, | |||
| 2.0, 14.0, 1.0, 13.0, | |||
| 10.0, 6.0, 9.0, 5.0); | |||
| mat4 cluster = mat4(12.0, 5.0, 6.0, 13.0, | |||
| 4.0, 0.0, 1.0, 7.0, | |||
| 11.0, 3.0, 2.0, 8.0, | |||
| 15.0, 10.0, 9.0, 14.0); | |||
| void main() | |||
| { | |||
| vec4 col = pass_Color; | |||
| float t = cluster[int(mod(gl_FragCoord.x, 4.0))] | |||
| [int(mod(gl_FragCoord.y, 4.0))]; | |||
| t = (t + 0.5) / 17.0; | |||
| col.x += fract(t - col.x) - t; | |||
| col.y += fract(t - col.y) - t; | |||
| col.z += fract(t - col.z) - t; | |||
| gl_FragColor = col; | |||
| } | |||
| -- HLSL.Vert -- | |||
| void main(float4 in_Vertex : POSITION, | |||
| float4 in_Color : COLOR, | |||
| uniform float4x4 proj_matrix, | |||
| uniform float4x4 view_matrix, | |||
| uniform float4x4 model_matrix, | |||
| out float4 out_Color : COLOR, | |||
| out float4 out_Position : POSITION) | |||
| { | |||
| out_Position = mul(proj_matrix, mul(view_matrix, mul(model_matrix, in_Vertex))); | |||
| out_Color = in_Color; | |||
| } | |||
| -- HLSL.Frag -- | |||
| float4x4 bayer = float4x4( 0.0, 12.0, 3.0, 15.0, | |||
| 8.0, 4.0, 11.0, 7.0, | |||
| 2.0, 14.0, 1.0, 13.0, | |||
| 10.0, 6.0, 9.0, 5.0); | |||
| #if 1 | |||
| float4x4 cluster = float4x4(12.0, 5.0, 6.0, 13.0, | |||
| 4.0, 0.0, 1.0, 7.0, | |||
| 11.0, 3.0, 2.0, 8.0, | |||
| 15.0, 10.0, 9.0, 14.0); | |||
| #endif | |||
| void main(float4 in_Color : COLOR, | |||
| float4 in_FragCoord : WPOS, | |||
| out float4 out_FragColor : COLOR) | |||
| { | |||
| float4 col = in_Color; | |||
| #if 1 | |||
| int x = (int)in_FragCoord.x; | |||
| int y = (int)in_FragCoord.y; | |||
| // FIXME: we cannot address this matrix directly on the PS3 | |||
| float t = bayer[int(frac(x * 0.25) * 4.0)] | |||
| [int(frac(y * 0.25) * 4.0)]; | |||
| t = (t + 0.5) / 17.0; | |||
| col.x += frac(t - col.x) - t; | |||
| col.y += frac(t - col.y) - t; | |||
| col.z += frac(t - col.z) - t; | |||
| #endif | |||
| out_FragColor = col; | |||
| } | |||
| @@ -619,6 +619,7 @@ | |||
| <LolFxCompile Include="gpu\emptymaterial.lolfx" /> | |||
| <LolFxCompile Include="gpu\testmaterial.lolfx" /> | |||
| <LolFxCompile Include="gpu\tile.lolfx" /> | |||
| <LolFxCompile Include="gradient.lolfx" /> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <None Include="easymesh\easymesh-parser.y" /> | |||