[artoolkit-commits] artoolkit/lib/SRC/Gl gsub_lite.c,1.16,1.17
Optical marker tracking and overlay for augmented reality.
Brought to you by:
philip_lamb
From: Philip L. <phi...@us...> - 2006-06-08 21:34:49
|
Update of /cvsroot/artoolkit/artoolkit/lib/SRC/Gl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15887 Modified Files: gsub_lite.c Log Message: Add better runtime checking of GL extensions, and support for MESA Y'CbCr format textures. Index: gsub_lite.c =================================================================== RCS file: /cvsroot/artoolkit/artoolkit/lib/SRC/Gl/gsub_lite.c,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** gsub_lite.c 22 May 2006 22:18:18 -0000 1.16 --- gsub_lite.c 8 Jun 2006 21:34:41 -0000 1.17 *************** *** 111,114 **** --- 111,119 ---- # define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 #endif + #ifndef GL_MESA_ycbcr_texture + # define GL_YCBCR_MESA 0x8757 + # define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA + # define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB + #endif //#define ARGL_DEBUG *************** *** 695,699 **** // Use default pixel format handed to us by <AR/config.h>. if (!arglPixelFormatSet(contextSettings, AR_DEFAULT_PIXEL_FORMAT)) { ! fprintf(stderr, "Unknown default pixel format defined in config.h.\n"); return (NULL); } --- 700,704 ---- // Use default pixel format handed to us by <AR/config.h>. if (!arglPixelFormatSet(contextSettings, AR_DEFAULT_PIXEL_FORMAT)) { ! fprintf(stderr, "Unknown or unsupported default pixel format defined in config.h.\n"); return (NULL); } *************** *** 847,870 **** break; case AR_PIXEL_FORMAT_ABGR: // SGI. ! contextSettings->pixIntFormat = GL_RGBA; ! contextSettings->pixFormat = GL_ABGR_EXT; ! contextSettings->pixType = GL_UNSIGNED_BYTE; ! contextSettings->pixSize = 4; break; case AR_PIXEL_FORMAT_BGRA: // Windows. ! contextSettings->pixIntFormat = GL_RGBA; ! contextSettings->pixFormat = GL_BGRA; ! contextSettings->pixType = GL_UNSIGNED_BYTE; ! contextSettings->pixSize = 4; break; case AR_PIXEL_FORMAT_ARGB: // Mac. ! contextSettings->pixIntFormat = GL_RGBA; ! contextSettings->pixFormat = GL_BGRA; #ifdef AR_BIG_ENDIAN ! contextSettings->pixType = GL_UNSIGNED_INT_8_8_8_8_REV; #else ! contextSettings->pixType = GL_UNSIGNED_INT_8_8_8_8; #endif ! contextSettings->pixSize = 4; break; case AR_PIXEL_FORMAT_RGB: --- 852,888 ---- break; case AR_PIXEL_FORMAT_ABGR: // SGI. ! if (arglGLCapabilityCheck(0, (unsigned char *)"GL_EXT_abgr")) { ! contextSettings->pixIntFormat = GL_RGBA; ! contextSettings->pixFormat = GL_ABGR_EXT; ! contextSettings->pixType = GL_UNSIGNED_BYTE; ! contextSettings->pixSize = 4; ! } else { ! return (FALSE); ! } break; case AR_PIXEL_FORMAT_BGRA: // Windows. ! if (arglGLCapabilityCheck(0x0120, (unsigned char *)"GL_EXT_bgra")) { ! contextSettings->pixIntFormat = GL_RGBA; ! contextSettings->pixFormat = GL_BGRA; ! contextSettings->pixType = GL_UNSIGNED_BYTE; ! contextSettings->pixSize = 4; ! } else { ! return (FALSE); ! } break; case AR_PIXEL_FORMAT_ARGB: // Mac. ! if (arglGLCapabilityCheck(0x0120, (unsigned char *)"GL_EXT_bgra") ! && arglGLCapabilityCheck(0x0120, (unsigned char *)"GL_APPLE_packed_pixels")) { ! contextSettings->pixIntFormat = GL_RGBA; ! contextSettings->pixFormat = GL_BGRA; #ifdef AR_BIG_ENDIAN ! contextSettings->pixType = GL_UNSIGNED_INT_8_8_8_8_REV; #else ! contextSettings->pixType = GL_UNSIGNED_INT_8_8_8_8; #endif ! contextSettings->pixSize = 4; ! } else { ! return (FALSE); ! } break; case AR_PIXEL_FORMAT_RGB: *************** *** 875,901 **** break; case AR_PIXEL_FORMAT_BGR: ! contextSettings->pixIntFormat = GL_RGB; ! contextSettings->pixFormat = GL_BGR; ! contextSettings->pixType = GL_UNSIGNED_BYTE; ! contextSettings->pixSize = 3; break; case AR_PIXEL_FORMAT_2vuy: ! contextSettings->pixIntFormat = GL_RGB; ! contextSettings->pixFormat = GL_YCBCR_422_APPLE; #ifdef AR_BIG_ENDIAN ! contextSettings->pixType = GL_UNSIGNED_SHORT_8_8_REV_APPLE; #else ! contextSettings->pixType = GL_UNSIGNED_SHORT_8_8_APPLE; #endif contextSettings->pixSize = 2; break; case AR_PIXEL_FORMAT_yuvs: ! contextSettings->pixIntFormat = GL_RGB; ! contextSettings->pixFormat = GL_YCBCR_422_APPLE; #ifdef AR_BIG_ENDIAN ! contextSettings->pixType = GL_UNSIGNED_SHORT_8_8_APPLE; #else ! contextSettings->pixType = GL_UNSIGNED_SHORT_8_8_REV_APPLE; #endif contextSettings->pixSize = 2; break; --- 893,947 ---- break; case AR_PIXEL_FORMAT_BGR: ! if (arglGLCapabilityCheck(0x0120, (unsigned char *)"GL_EXT_bgra")) { ! contextSettings->pixIntFormat = GL_RGB; ! contextSettings->pixFormat = GL_BGR; ! contextSettings->pixType = GL_UNSIGNED_BYTE; ! contextSettings->pixSize = 3; ! } else { ! return (FALSE); ! } break; case AR_PIXEL_FORMAT_2vuy: ! if (arglGLCapabilityCheck(0, (unsigned char *)"GL_APPLE_ycbcr_422")) { ! contextSettings->pixIntFormat = GL_RGB; ! contextSettings->pixFormat = GL_YCBCR_422_APPLE; #ifdef AR_BIG_ENDIAN ! contextSettings->pixType = GL_UNSIGNED_SHORT_8_8_REV_APPLE; #else ! contextSettings->pixType = GL_UNSIGNED_SHORT_8_8_APPLE; #endif + } else if (arglGLCapabilityCheck(0, (unsigned char *)"GL_MESA_ycbcr_texture")) { + contextSettings->pixIntFormat = GL_YCBCR_MESA; + contextSettings->pixFormat = GL_YCBCR_MESA; + #ifdef AR_BIG_ENDIAN + contextSettings->pixType = GL_UNSIGNED_SHORT_8_8_REV_MESA; + #else + contextSettings->pixType = GL_UNSIGNED_SHORT_8_8_MESA; + #endif + } else { + return (FALSE); + } contextSettings->pixSize = 2; break; case AR_PIXEL_FORMAT_yuvs: ! if (arglGLCapabilityCheck(0, (unsigned char *)"GL_APPLE_ycbcr_422")) { ! contextSettings->pixIntFormat = GL_RGB; ! contextSettings->pixFormat = GL_YCBCR_422_APPLE; #ifdef AR_BIG_ENDIAN ! contextSettings->pixType = GL_UNSIGNED_SHORT_8_8_APPLE; #else ! contextSettings->pixType = GL_UNSIGNED_SHORT_8_8_REV_APPLE; #endif + } else if (arglGLCapabilityCheck(0, (unsigned char *)"GL_MESA_ycbcr_texture")) { + contextSettings->pixIntFormat = GL_YCBCR_MESA; + contextSettings->pixFormat = GL_YCBCR_MESA; + #ifdef AR_BIG_ENDIAN + contextSettings->pixType = GL_UNSIGNED_SHORT_8_8_MESA; + #else + contextSettings->pixType = GL_UNSIGNED_SHORT_8_8_REV_MESA; + #endif + } else { + return (FALSE); + } contextSettings->pixSize = 2; break; *************** *** 939,945 **** break; case GL_YCBCR_422_APPLE: #ifdef AR_BIG_ENDIAN ! if (contextSettings->pixType == GL_UNSIGNED_SHORT_8_8_REV_APPLE) *format = AR_PIXEL_FORMAT_2vuy; ! else if (contextSettings->pixType == GL_UNSIGNED_SHORT_8_8_APPLE) *format = AR_PIXEL_FORMAT_yuvs; #else if (contextSettings->pixType == GL_UNSIGNED_SHORT_8_8_APPLE) *format = AR_PIXEL_FORMAT_2vuy; --- 985,992 ---- break; case GL_YCBCR_422_APPLE: + case GL_YCBCR_MESA: #ifdef AR_BIG_ENDIAN ! if (contextSettings->pixType == GL_UNSIGNED_SHORT_8_8_REV_APPLE) *format = AR_PIXEL_FORMAT_2vuy; // N.B.: GL_UNSIGNED_SHORT_8_8_REV_APPLE = GL_UNSIGNED_SHORT_8_8_REV_MESA ! else if (contextSettings->pixType == GL_UNSIGNED_SHORT_8_8_APPLE) *format = AR_PIXEL_FORMAT_yuvs; // GL_UNSIGNED_SHORT_8_8_APPLE = GL_UNSIGNED_SHORT_8_8_MESA #else if (contextSettings->pixType == GL_UNSIGNED_SHORT_8_8_APPLE) *format = AR_PIXEL_FORMAT_2vuy; |