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