浏览代码

test: minor tuning, esp. for the PS3.

legacy
Sam Hocevar gary 13 年前
父节点
当前提交
94f5450399
共有 1 个文件被更改,包括 29 次插入15 次删除
  1. +29
    -15
      test/tutorial/tut03.cpp

+ 29
- 15
test/tutorial/tut03.cpp 查看文件

@@ -88,8 +88,8 @@ public:
#if defined __CELLOS_LV2__
//m_center = f64cmplx(-.22815528839841, -1.11514249704382);
//m_center = f64cmplx(0.001643721971153, 0.822467633298876);
m_center = f64cmplx(-0.65823419062254, .50221777363480);
m_zoom_speed = 0;//-0.0025;
m_center = f64cmplx(-0.65823419062254, 0.50221777363480);
m_zoom_speed = -0.000025;
#else
m_center = -0.75;
m_zoom_speed = 0.0;
@@ -119,7 +119,9 @@ public:
uint8_t red = r * 255.99f;
uint8_t green = g * 255.99f;
uint8_t blue = b * 255.99f;
#if defined __native_client__
#if defined __CELLOS_LV2__
m_palette[i] = u8vec4(255, red, green, blue);
#elif defined __native_client__
m_palette[i] = u8vec4(red, green, blue, 255);
#else
m_palette[i] = u8vec4(blue, green, red, 255);
@@ -312,12 +314,13 @@ public:
{
helpers[slice].fractal = this;
helpers[slice].slice = slice;
helpers[slice].thread = new Thread(DoWorkHelper::Help,
&helpers[slice]);
// helpers[slice].thread = new Thread(DoWorkHelper::Help,
// &helpers[slice]);
DoWork(slice);
}
for (int slice = 0; slice < m_slices; slice++)
{
delete helpers[slice].thread;
// delete helpers[slice].thread;
}
}
}
@@ -382,7 +385,11 @@ public:
}
else
{
#if defined __CELLOS_LV2__
*m_pixelstart++ = u8vec4(255, 0, 0, 0);
#else
*m_pixelstart++ = u8vec4(0, 0, 0, 255);
#endif
}
}
}
@@ -476,8 +483,8 @@ public:
* point lies. The fragment shader will call floor() on
* this value. We add or remove a slight offset to avoid
* rounding issues at the image's edges. */
" v_IndexX = v_CenterX * u_ScreenSize.z - (offsets.zwzw + vec4(0.001, 0.002, 0.003, 0.004));"
" v_IndexY = v_CenterY * u_ScreenSize.w - (offsets.zwwz + vec4(0.0015, 0.0025, 0.0035, 0.0045));"
" v_IndexX = v_CenterX * u_ScreenSize.z - offsets.zwzw;"
" v_IndexY = v_CenterY * u_ScreenSize.w - offsets.zwwz;"
"}",

#if !defined HAVE_GLES_2X
@@ -586,22 +593,22 @@ public:
" + offsets.xyxy * u_TexelSize.x;"
" v_CenterY = zoomscale * a_TexCoord.y - zoomty"
" + offsets.xyyx * u_TexelSize.y;"
" v_IndexX = v_CenterX * u_ScreenSize.z - (offsets.zwzw + float4(0.001, 0.002, 0.003, 0.004));"
" v_IndexY = v_CenterY * u_ScreenSize.w - (offsets.zwwz + float4(0.0015, 0.0025, 0.0035, 0.0045));"
" v_IndexX = v_CenterX * u_ScreenSize.z - offsets.zwzw;"
" v_IndexY = v_CenterY * u_ScreenSize.w - offsets.zwwz;"
"}",

"void main(in float4 v_CenterX,"
" in float4 v_CenterY,"
" in float4 v_IndexX,"
" in float4 v_IndexY,"
" uniform float4 u_TexelSize,"
" uniform float4 u_TexelSize2,"
" uniform sampler2D u_Texture,"
" out float4 out_FragColor : COLOR)"
"{"
" float4 v05 = float4(0.5, 0.5, 0.5, 0.5);"
" float4 rx, ry, t0, dx, dy, dd;"
" rx = u_TexelSize.x + u_TexelSize.z * floor(v_IndexX);"
" ry = u_TexelSize.y + u_TexelSize.w * floor(v_IndexY);"
" rx = u_TexelSize2.x + u_TexelSize2.z * floor(v_IndexX);"
" ry = u_TexelSize2.y + u_TexelSize2.w * floor(v_IndexY);"
" t0 = step(abs(rx - v05), v05) * step(abs(ry - v05), v05);"
" dx = rx - v_CenterX;"
" dy = ry - v_CenterY;"
@@ -613,8 +620,6 @@ public:
" dd.xy = lerp(dd.xz, dd.yw, t1);"
" float t2 = step(dd.x, dd.y);"
" ret.xy = lerp(ret.xz, ret.yw, t2);"
/* FIXME: above currently broken; fall back to this */
" ret.xy = float2(v_CenterX.x, v_CenterY.x * 0.25);"
" out_FragColor = tex2D(u_Texture, ret.xy);"
"}"
#endif
@@ -622,6 +627,9 @@ public:
m_vertexattrib = m_shader->GetAttribLocation("a_Vertex");
m_texattrib = m_shader->GetAttribLocation("a_TexCoord");
m_texeluni = m_shader->GetUniformLocation("u_TexelSize");
#if defined __CELLOS_LV2__
m_texeluni2 = m_shader->GetUniformLocation("u_TexelSize2");
#endif
m_screenuni = m_shader->GetUniformLocation("u_ScreenSize");
m_zoomuni = m_shader->GetUniformLocation("u_ZoomSettings");
m_ready = true;
@@ -669,6 +677,9 @@ public:

m_shader->Bind();
m_shader->SetUniform(m_texeluni, m_texel_settings);
#if defined __CELLOS_LV2__
m_shader->SetUniform(m_texeluni2, m_texel_settings);
#endif
m_shader->SetUniform(m_screenuni, m_screen_settings);
m_shader->SetUniform(m_zoomuni, m_zoom_settings);
#if !defined __CELLOS_LV2__ && !defined __ANDROID__
@@ -721,6 +732,9 @@ private:
GLuint m_tco;
#endif
int m_vertexattrib, m_texattrib, m_texeluni, m_screenuni, m_zoomuni;
#if defined __CELLOS_LV2__
int m_texeluni2;
#endif
int m_frame, m_slices, m_dirty[4];
bool m_ready, m_drag;



正在加载...
取消
保存