Quellcode durchsuchen

gpu: convert the gradient shader to a LolFx effect file.

legacy
Sam Hocevar sam vor 12 Jahren
Ursprung
Commit
100f53e550
4 geänderte Dateien mit 106 neuen und 94 gelöschten Zeilen
  1. +1
    -1
      src/Makefile.am
  2. +4
    -93
      src/gradient.cpp
  3. +100
    -0
      src/gradient.lolfx
  4. +1
    -0
      src/lolcore.vcxproj

+ 1
- 1
src/Makefile.am Datei anzeigen

@@ -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 \


+ 4
- 93
src/gradient.cpp Datei anzeigen

@@ -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));



+ 100
- 0
src/gradient.lolfx Datei anzeigen

@@ -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;
}


+ 1
- 0
src/lolcore.vcxproj Datei anzeigen

@@ -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" />


Laden…
Abbrechen
Speichern