Mercurial > sdl-ios-xcode
changeset 5243:c0e9d3897a85
Fixed compiling on Windows
Added an untested shader for YV12 textures
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Wed, 09 Feb 2011 10:31:12 -0800 |
parents | 55b31686f82b |
children | 0a154d1e9aa9 |
files | VisualC/SDL/SDL_VS2008.vcproj VisualC/SDL/SDL_VS2010.vcxproj src/render/opengl/SDL_shaders_gl.c src/render/opengl/SDL_shaders_gl.h |
diffstat | 4 files changed, 63 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/VisualC/SDL/SDL_VS2008.vcproj Wed Feb 09 10:13:26 2011 -0800 +++ b/VisualC/SDL/SDL_VS2008.vcproj Wed Feb 09 10:31:12 2011 -0800 @@ -1055,6 +1055,14 @@ > </File> <File + RelativePath="..\..\src\render\opengl\SDL_shaders_gl.c" + > + </File> + <File + RelativePath="..\..\src\render\opengl\SDL_shaders_gl.h" + > + </File> + <File RelativePath="..\..\src\video\SDL_shape.c" > </File>
--- a/VisualC/SDL/SDL_VS2010.vcxproj Wed Feb 09 10:13:26 2011 -0800 +++ b/VisualC/SDL/SDL_VS2010.vcxproj Wed Feb 09 10:31:12 2011 -0800 @@ -285,6 +285,7 @@ <ClInclude Include="..\..\src\libm\math.h" /> <ClInclude Include="..\..\src\libm\math_private.h" /> <ClInclude Include="..\..\src\render\mmx.h" /> + <ClInclude Include="..\..\src\render\opengl\SDL_shaders_gl.h" /> <ClInclude Include="..\..\src\render\SDL_sysrender.h" /> <ClInclude Include="..\..\src\render\SDL_yuv_sw_c.h" /> <ClInclude Include="..\..\src\audio\SDL_audio_c.h" /> @@ -373,6 +374,7 @@ <ClCompile Include="..\..\src\libm\s_sin.c" /> <ClCompile Include="..\..\src\render\direct3d\SDL_render_d3d.c" /> <ClCompile Include="..\..\src\render\opengl\SDL_render_gl.c" /> + <ClCompile Include="..\..\src\render\opengl\SDL_shaders_gl.c" /> <ClCompile Include="..\..\src\render\SDL_render.c" /> <ClCompile Include="..\..\src\render\SDL_yuv_mmx.c" /> <ClCompile Include="..\..\src\render\SDL_yuv_sw.c" />
--- a/src/render/opengl/SDL_shaders_gl.c Wed Feb 09 10:13:26 2011 -0800 +++ b/src/render/opengl/SDL_shaders_gl.c Wed Feb 09 10:31:12 2011 -0800 @@ -114,6 +114,58 @@ " gl_FragColor = texture2D(tex0, v_texCoord) * v_color;\n" "}" }, + + /* SHADER_YV12 */ + { + /* vertex shader */ +"varying vec4 v_color;\n" +"varying vec2 v_texCoord;\n" +"\n" +"void main()\n" +"{\n" +" gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" +" v_color = gl_Color;\n" +" v_texCoord = vec2(gl_MultiTexCoord0);\n" +"}", + /* fragment shader */ +"varying vec4 v_color;\n" +"varying vec2 v_texCoord;\n" +"uniform sampler2D tex0; // Y \n" +"uniform sampler2D tex1; // U \n" +"uniform sampler2D tex2; // V \n" +"\n" +"// YUV offset \n" +"const vec3 offset = vec3(-0.0625, -0.5, -0.5);\n" +"\n" +"// RGB coefficients \n" +"const vec3 Rcoeff = vec3(1.164, 0.000, 1.596);\n" +"const vec3 Gcoeff = vec3(1.164, -0.391, -0.813);\n" +"const vec3 Bcoeff = vec3(1.164, 2.018, 0.000);\n" +"\n" +"void main()\n" +"{\n" +" vec2 tcoord;\n" +" vec3 yuv, rgb;\n" +"\n" +" // Get the Y value \n" +" tcoord = v_texCoord;\n" +" yuv.x = texture2D(tex0, tcoord).r;\n" +"\n" +" // Get the U and V values \n" +" tcoord *= 0.5;\n" +" yuv.y = texture2D(tex1, tcoord).r;\n" +" yuv.z = texture2D(tex2, tcoord).r;\n" +"\n" +" // Do the color transform \n" +" yuv += offset;\n" +" rgb.r = dot(yuv, Rcoeff);\n" +" rgb.g = dot(yuv, Gcoeff);\n" +" rgb.b = dot(yuv, Bcoeff);\n" +"\n" +" // That was easy. :) \n" +" gl_FragColor = vec4(rgb, 1.0) * v_color;\n" +"}" + }, }; static SDL_bool @@ -209,10 +261,6 @@ static void DestroyShaderProgram(GL_ShaderContext *ctx, GL_ShaderData *data) { - if (index == SHADER_NONE) { - return; - } - ctx->glDeleteObjectARB(data->vert_shader); ctx->glDeleteObjectARB(data->frag_shader); ctx->glDeleteObjectARB(data->program); @@ -281,7 +329,6 @@ /* Compile all the shaders */ for (i = 0; i < NUM_SHADERS; ++i) { if (!CompileShaderProgram(ctx, i, &ctx->shaders[i])) { -fprintf(stderr, "Unable to compile shader!\n"); GL_DestroyShaderContext(ctx); return NULL; }