Przeglądaj źródła

tutorial: port the new Mandelbrot shader to Cg.

legacy
Sam Hocevar gary 13 lat temu
rodzic
commit
790f3783d2
1 zmienionych plików z 41 dodań i 10 usunięć
  1. +41
    -10
      test/tutorial/tut03.cpp

+ 41
- 10
test/tutorial/tut03.cpp Wyświetl plik

@@ -135,7 +135,7 @@ public:
f64cmplx oldcenter = m_center;
double oldradius = m_radius;
#ifdef __CELLOS_LV2__
m_radius *= pow(2.0, -deltams * 0.00015);
m_radius *= pow(2.0, -deltams * 0.0005);
m_center = f64cmplx(0.001643721971153, 0.822467633298876);
#else
double zoom = pow(2.0, (buttons[0] ? -deltams : deltams) * 0.0025);
@@ -314,7 +314,7 @@ public:
/* Slightly shift our pixel so that it does not lie at
* an exact texel boundary. This would lead to visual
* artifacts. */
"coord -= 0.1 * in_PixelDelta.x;"
" coord -= 0.1 * in_PixelDelta.xy;"
/* Get a pixel from each slice */
" vec4 p0 = texture2D(in_Texture, nearest0(coord).xy);"
" vec4 p1 = texture2D(in_Texture, nearest1(coord).xy);"
@@ -332,19 +332,50 @@ public:
" out_Position = in_Position;"
"}",

"void main(float4 in_FragCoord : WPOS,"
" float2 in_TexCoord : TEXCOORD0,"
"float3 nearest0(float2 p, float4 in_PixelDelta) {"
" float2 q = p + 0.5 * in_PixelDelta.xy;"
" q -= fmod(q, 2.0 * in_PixelDelta.xy);"
" q += 0.5 * in_PixelDelta.xy;"
" return float3(q * float2(1.0, 0.25),"
" length(q - p));"
"}"
""
"float3 nearest1(float2 p, float4 in_PixelDelta) {"
" float2 q = p - 0.5 * in_PixelDelta.xy;"
" q -= fmod(q, 2.0 * in_PixelDelta.xy);"
" q += 1.5 * in_PixelDelta.xy;"
" return float3(q * float2(1.0, 0.25) + float2(0.0, 0.25),"
" length(q - p));"
"}"
""
"float3 nearest2(float2 p, float4 in_PixelDelta) {"
" float2 q = p + float2(0.5, -0.5) * in_PixelDelta.xy;"
" q -= fmod(q, 2.0 * in_PixelDelta.xy);"
" q += float2(0.5, 1.5) * in_PixelDelta.xy;"
" return float3(q * float2(1.0, 0.25) + float2(0.0, 0.50),"
" length(q - p));"
"}"
""
"float3 nearest3(float2 p, float4 in_PixelDelta) {"
" float2 q = p + float2(-0.5, 0.5) * in_PixelDelta.xy;"
" q -= fmod(q, 2.0 * in_PixelDelta.xy);"
" q += float2(1.5, 0.5) * in_PixelDelta.xy;"
" return float3(q * float2(1.0, 0.25) + float2(0.0, 0.75),"
" length(q - p));"
"}"
""
"void main(float2 in_TexCoord : TEXCOORD0,"
" uniform float4 in_PixelDelta,"
" uniform sampler2D in_Texture,"
" out float4 out_FragColor : COLOR)"
"{"
" float2 coord = in_TexCoord.xy;"
" float i = frac((in_FragCoord.x - 0.5) * 0.5) * 2.0;"
" float j = frac((in_FragCoord.y - 0.5 + i) * 0.5) * 2.0;"
" coord.y += i + j * 2;"
" coord.y *= 0.25;"
" float4 p = tex2D(in_Texture, coord);"
" out_FragColor = p;"
" coord -= 0.1 * in_PixelDelta.xy;"
" float4 p0 = tex2D(in_Texture, nearest0(coord, in_PixelDelta).xy);"
" float4 p1 = tex2D(in_Texture, nearest1(coord, in_PixelDelta).xy);"
" float4 p2 = tex2D(in_Texture, nearest2(coord, in_PixelDelta).xy);"
" float4 p3 = tex2D(in_Texture, nearest3(coord, in_PixelDelta).xy);"
" out_FragColor = 0.25 * (p0 + p1 + p2 + p3);"
"}"
#endif
);


Ładowanie…
Anuluj
Zapisz