| @@ -88,8 +88,8 @@ public: | |||||
| #if defined __CELLOS_LV2__ | #if defined __CELLOS_LV2__ | ||||
| //m_center = f64cmplx(-.22815528839841, -1.11514249704382); | //m_center = f64cmplx(-.22815528839841, -1.11514249704382); | ||||
| //m_center = f64cmplx(0.001643721971153, 0.822467633298876); | //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 | #else | ||||
| m_center = -0.75; | m_center = -0.75; | ||||
| m_zoom_speed = 0.0; | m_zoom_speed = 0.0; | ||||
| @@ -119,7 +119,9 @@ public: | |||||
| uint8_t red = r * 255.99f; | uint8_t red = r * 255.99f; | ||||
| uint8_t green = g * 255.99f; | uint8_t green = g * 255.99f; | ||||
| uint8_t blue = b * 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); | m_palette[i] = u8vec4(red, green, blue, 255); | ||||
| #else | #else | ||||
| m_palette[i] = u8vec4(blue, green, red, 255); | m_palette[i] = u8vec4(blue, green, red, 255); | ||||
| @@ -312,12 +314,13 @@ public: | |||||
| { | { | ||||
| helpers[slice].fractal = this; | helpers[slice].fractal = this; | ||||
| helpers[slice].slice = slice; | 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++) | for (int slice = 0; slice < m_slices; slice++) | ||||
| { | { | ||||
| delete helpers[slice].thread; | |||||
| // delete helpers[slice].thread; | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -382,7 +385,11 @@ public: | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| #if defined __CELLOS_LV2__ | |||||
| *m_pixelstart++ = u8vec4(255, 0, 0, 0); | |||||
| #else | |||||
| *m_pixelstart++ = u8vec4(0, 0, 0, 255); | *m_pixelstart++ = u8vec4(0, 0, 0, 255); | ||||
| #endif | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -476,8 +483,8 @@ public: | |||||
| * point lies. The fragment shader will call floor() on | * point lies. The fragment shader will call floor() on | ||||
| * this value. We add or remove a slight offset to avoid | * this value. We add or remove a slight offset to avoid | ||||
| * rounding issues at the image's edges. */ | * 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 | #if !defined HAVE_GLES_2X | ||||
| @@ -586,22 +593,22 @@ public: | |||||
| " + offsets.xyxy * u_TexelSize.x;" | " + offsets.xyxy * u_TexelSize.x;" | ||||
| " v_CenterY = zoomscale * a_TexCoord.y - zoomty" | " v_CenterY = zoomscale * a_TexCoord.y - zoomty" | ||||
| " + offsets.xyyx * u_TexelSize.y;" | " + 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," | "void main(in float4 v_CenterX," | ||||
| " in float4 v_CenterY," | " in float4 v_CenterY," | ||||
| " in float4 v_IndexX," | " in float4 v_IndexX," | ||||
| " in float4 v_IndexY," | " in float4 v_IndexY," | ||||
| " uniform float4 u_TexelSize," | |||||
| " uniform float4 u_TexelSize2," | |||||
| " uniform sampler2D u_Texture," | " uniform sampler2D u_Texture," | ||||
| " out float4 out_FragColor : COLOR)" | " out float4 out_FragColor : COLOR)" | ||||
| "{" | "{" | ||||
| " float4 v05 = float4(0.5, 0.5, 0.5, 0.5);" | " float4 v05 = float4(0.5, 0.5, 0.5, 0.5);" | ||||
| " float4 rx, ry, t0, dx, dy, dd;" | " 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);" | " t0 = step(abs(rx - v05), v05) * step(abs(ry - v05), v05);" | ||||
| " dx = rx - v_CenterX;" | " dx = rx - v_CenterX;" | ||||
| " dy = ry - v_CenterY;" | " dy = ry - v_CenterY;" | ||||
| @@ -613,8 +620,6 @@ public: | |||||
| " dd.xy = lerp(dd.xz, dd.yw, t1);" | " dd.xy = lerp(dd.xz, dd.yw, t1);" | ||||
| " float t2 = step(dd.x, dd.y);" | " float t2 = step(dd.x, dd.y);" | ||||
| " ret.xy = lerp(ret.xz, ret.yw, t2);" | " 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);" | " out_FragColor = tex2D(u_Texture, ret.xy);" | ||||
| "}" | "}" | ||||
| #endif | #endif | ||||
| @@ -622,6 +627,9 @@ public: | |||||
| m_vertexattrib = m_shader->GetAttribLocation("a_Vertex"); | m_vertexattrib = m_shader->GetAttribLocation("a_Vertex"); | ||||
| m_texattrib = m_shader->GetAttribLocation("a_TexCoord"); | m_texattrib = m_shader->GetAttribLocation("a_TexCoord"); | ||||
| m_texeluni = m_shader->GetUniformLocation("u_TexelSize"); | 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_screenuni = m_shader->GetUniformLocation("u_ScreenSize"); | ||||
| m_zoomuni = m_shader->GetUniformLocation("u_ZoomSettings"); | m_zoomuni = m_shader->GetUniformLocation("u_ZoomSettings"); | ||||
| m_ready = true; | m_ready = true; | ||||
| @@ -669,6 +677,9 @@ public: | |||||
| m_shader->Bind(); | m_shader->Bind(); | ||||
| m_shader->SetUniform(m_texeluni, m_texel_settings); | 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_screenuni, m_screen_settings); | ||||
| m_shader->SetUniform(m_zoomuni, m_zoom_settings); | m_shader->SetUniform(m_zoomuni, m_zoom_settings); | ||||
| #if !defined __CELLOS_LV2__ && !defined __ANDROID__ | #if !defined __CELLOS_LV2__ && !defined __ANDROID__ | ||||
| @@ -721,6 +732,9 @@ private: | |||||
| GLuint m_tco; | GLuint m_tco; | ||||
| #endif | #endif | ||||
| int m_vertexattrib, m_texattrib, m_texeluni, m_screenuni, m_zoomuni; | 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]; | int m_frame, m_slices, m_dirty[4]; | ||||
| bool m_ready, m_drag; | bool m_ready, m_drag; | ||||