--- a/src/video/SDL_renderer_gl.c Sat Dec 06 18:37:06 2008 +0000
+++ b/src/video/SDL_renderer_gl.c Sun Dec 07 04:02:23 2008 +0000
@@ -146,6 +146,8 @@
SDL_bool updateSize;
SDL_bool GL_ARB_texture_rectangle_supported;
SDL_bool GL_EXT_paletted_texture_supported;
+ SDL_bool GL_APPLE_ycbcr_422_supported;
+ SDL_bool GL_MESA_ycbcr_texture_supported;
SDL_bool GL_ARB_fragment_program_supported;
int blendMode;
int scaleMode;
@@ -378,6 +380,12 @@
}
--info->num_texture_formats;
}
+ if (SDL_GL_ExtensionSupported("GL_APPLE_ycbcr_422")) {
+ data->GL_APPLE_ycbcr_422_supported = SDL_TRUE;
+ }
+ if (SDL_GL_ExtensionSupported("GL_MESA_ycbcr_texture")) {
+ data->GL_MESA_ycbcr_texture_supported = SDL_TRUE;
+ }
if (SDL_GL_ExtensionSupported("GL_APPLE_texture_range")) {
data->glTextureRangeAPPLE =
(void (*)(GLenum, GLsizei, const GLvoid *))
@@ -483,7 +491,7 @@
SDL_strlen(source), source);
if (data->glGetError() == GL_INVALID_OPERATION)
- {
+ {
#if DEBUG_PROGRAM_COMPILE
GLint pos = 0;
const GLubyte *errstr;
@@ -660,28 +668,24 @@
format = GL_BGRA;
type = GL_UNSIGNED_INT_2_10_10_10_REV;
break;
-#if 0 /* Ryan's pixel shader code should be better, once it works. :) */
- case SDL_PIXELFORMAT_UYVY:
-// if (renderdata->GL_MESA_ycbcr_texture) {
-// internalFormat = 3;
-// format = GL_YCBCR_MESA;
-// type = GL_UNSIGNED_SHORT_8_8_MESA;
-// } else if (renderdata->GL_APPLE_ycbcr_422) {
- internalFormat = GL_RGB;
- format = GL_YCBCR_422_APPLE;
-#if SDL_BYTEORDER == SDL_LIL_ENDIAN
- type = GL_UNSIGNED_SHORT_8_8_APPLE;
-#else
- type = GL_UNSIGNED_SHORT_8_8_REV_APPLE;
-#endif
-// } else {
-// SDL_SetError("Unsupported texture format");
-// return -1;
-// }
- break;
+ case SDL_PIXELFORMAT_UYVY:
+ if (renderdata->GL_APPLE_ycbcr_422_supported) {
+ internalFormat = GL_RGB;
+ format = GL_YCBCR_422_APPLE;
+#if SDL_BYTEORDER == SDL_LIL_ENDIAN
+ type = GL_UNSIGNED_SHORT_8_8_APPLE;
#else
- case SDL_PIXELFORMAT_UYVY:
- if (renderdata->GL_ARB_fragment_program_supported) {
+ type = GL_UNSIGNED_SHORT_8_8_REV_APPLE;
+#endif
+ } else if (renderdata->GL_MESA_ycbcr_texture_supported) {
+ internalFormat = GL_RGB;
+ format = GL_YCBCR_MESA;
+#if SDL_BYTEORDER == SDL_LIL_ENDIAN
+ type = GL_UNSIGNED_SHORT_8_8_MESA;
+#else
+ type = GL_UNSIGNED_SHORT_8_8_REV_MESA;
+#endif
+ } else if (renderdata->GL_ARB_fragment_program_supported) {
if (renderdata->fragment_program_UYVY == 0) {
renderdata->fragment_program_UYVY =
compile_shader(renderdata, GL_FRAGMENT_PROGRAM_ARB,
@@ -700,7 +704,28 @@
return -1;
}
break;
+ case SDL_PIXELFORMAT_YUY2:
+ if (renderdata->GL_APPLE_ycbcr_422_supported) {
+ internalFormat = GL_RGB;
+ format = GL_YCBCR_422_APPLE;
+#if SDL_BYTEORDER == SDL_LIL_ENDIAN
+ type = GL_UNSIGNED_SHORT_8_8_REV_APPLE;
+#else
+ type = GL_UNSIGNED_SHORT_8_8_APPLE;
#endif
+ } else if (renderdata->GL_MESA_ycbcr_texture_supported) {
+ internalFormat = GL_RGB;
+ format = GL_YCBCR_MESA;
+#if SDL_BYTEORDER == SDL_LIL_ENDIAN
+ type = GL_UNSIGNED_SHORT_8_8_REV_MESA;
+#else
+ type = GL_UNSIGNED_SHORT_8_8_MESA;
+#endif
+ } else {
+ SDL_SetError("Unsupported texture format");
+ return -1;
+ }
+ break;
default:
SDL_SetError("Unsupported texture format");
return -1;