packspu_pixel.c revision 49ad08ab15f3b96d2d5ba5134a0506dd7b27fdf1
45e9809aff7304721fddb95654901b32195c9c7avboxsync/* Copyright (c) 2001, Stanford University
45e9809aff7304721fddb95654901b32195c9c7avboxsync All rights reserved.
45e9809aff7304721fddb95654901b32195c9c7avboxsync See the file LICENSE.txt for information on redistributing this software. */
45e9809aff7304721fddb95654901b32195c9c7avboxsyncstatic GLboolean packspu_CheckTexImageFormat(GLenum format)
45e9809aff7304721fddb95654901b32195c9c7avboxsync /*crWarning("crPackCheckTexImageFormat FAILED format 0x%x isn't valid", format);*/
45e9809aff7304721fddb95654901b32195c9c7avboxsyncstatic GLboolean packspu_CheckTexImageType(GLenum type)
45e9809aff7304721fddb95654901b32195c9c7avboxsync /*crWarning("crPackCheckTexImageType FAILED type 0x%x isn't valid", type);*/
45e9809aff7304721fddb95654901b32195c9c7avboxsyncstatic GLboolean packspu_CheckTexImageInternalFormat(GLint internalformat)
45e9809aff7304721fddb95654901b32195c9c7avboxsync && internalformat!=GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
45e9809aff7304721fddb95654901b32195c9c7avboxsync && internalformat!=GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
45e9809aff7304721fddb95654901b32195c9c7avboxsync && internalformat!=GL_COMPRESSED_RGBA_S3TC_DXT5_EXT
45e9809aff7304721fddb95654901b32195c9c7avboxsync && internalformat!=GL_COMPRESSED_SRGB_S3TC_DXT1_EXT
45e9809aff7304721fddb95654901b32195c9c7avboxsync && internalformat!=GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT
45e9809aff7304721fddb95654901b32195c9c7avboxsync && internalformat!=GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT
45e9809aff7304721fddb95654901b32195c9c7avboxsync && internalformat!=GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT
45e9809aff7304721fddb95654901b32195c9c7avboxsync /*crWarning("crPackCheckTexImageInternalFormat FAILED internalformat 0x%x isn't valid", internalformat);*/
45e9809aff7304721fddb95654901b32195c9c7avboxsyncstatic GLboolean packspu_CheckTexImageParams(GLint internalformat, GLenum format, GLenum type)
45e9809aff7304721fddb95654901b32195c9c7avboxsync && packspu_CheckTexImageInternalFormat(internalformat);
45e9809aff7304721fddb95654901b32195c9c7avboxsyncstatic GLboolean packspu_CheckTexImageFormatType(GLenum format, GLenum type)
45e9809aff7304721fddb95654901b32195c9c7avboxsyncvoid PACKSPU_APIENTRY packspu_PixelStoref( GLenum pname, GLfloat param )
45e9809aff7304721fddb95654901b32195c9c7avboxsync /* NOTE: we do not send pixel store parameters to the server!
45e9809aff7304721fddb95654901b32195c9c7avboxsync * When we pack a glDrawPixels or glTexImage2D image we interpret
45e9809aff7304721fddb95654901b32195c9c7avboxsync * the user's pixel store parameters at that time and pack the
45e9809aff7304721fddb95654901b32195c9c7avboxsync * image in a canonical layout (see util/pixel.c).
45e9809aff7304721fddb95654901b32195c9c7avboxsyncvoid PACKSPU_APIENTRY packspu_PixelStorei( GLenum pname, GLint param )
45e9809aff7304721fddb95654901b32195c9c7avboxsyncvoid PACKSPU_APIENTRY packspu_DrawPixels( GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels )
45e9809aff7304721fddb95654901b32195c9c7avboxsync CRClientState *clientState = &(ctx->clientState->client);
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackDrawPixelsSWAP( width, height, format, type, pixels, &(clientState->unpack) );
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackDrawPixels( width, height, format, type, pixels, &(clientState->unpack) );
45e9809aff7304721fddb95654901b32195c9c7avboxsyncvoid PACKSPU_APIENTRY packspu_ReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels )
45e9809aff7304721fddb95654901b32195c9c7avboxsync CRClientState *clientState = &(ctx->clientState->client);
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackReadPixelsSWAP(x, y, width, height, format, type, pixels,
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackReadPixels(x, y, width, height, format, type, pixels,
45e9809aff7304721fddb95654901b32195c9c7avboxsync if (!crStateIsBufferBound(GL_PIXEL_PACK_BUFFER_ARB))
45e9809aff7304721fddb95654901b32195c9c7avboxsyncvoid PACKSPU_APIENTRY packspu_CopyPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum type )
45e9809aff7304721fddb95654901b32195c9c7avboxsync /* XXX why flush here? */
45e9809aff7304721fddb95654901b32195c9c7avboxsyncvoid PACKSPU_APIENTRY packspu_Bitmap( GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap )
45e9809aff7304721fddb95654901b32195c9c7avboxsync CRClientState *clientState = &(ctx->clientState->client);
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackBitmapSWAP( width, height, xorig, yorig, xmove, ymove, bitmap, &(clientState->unpack) );
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackBitmap( width, height, xorig, yorig, xmove, ymove, bitmap, &(clientState->unpack) );
45e9809aff7304721fddb95654901b32195c9c7avboxsyncvoid PACKSPU_APIENTRY packspu_TexImage1D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels )
45e9809aff7304721fddb95654901b32195c9c7avboxsync CRClientState *clientState = &(ctx->clientState->client);
45e9809aff7304721fddb95654901b32195c9c7avboxsync if (!packspu_CheckTexImageParams(internalformat, format, type))
45e9809aff7304721fddb95654901b32195c9c7avboxsync if (pixels || crStateIsBufferBound(GL_PIXEL_UNPACK_BUFFER_ARB))
45e9809aff7304721fddb95654901b32195c9c7avboxsync crWarning("packspu_TexImage1D invalid internalFormat(%x)/format(%x)/type(%x)", internalformat, format, type);
45e9809aff7304721fddb95654901b32195c9c7avboxsync internalformat = packspu_CheckTexImageInternalFormat(internalformat) ? internalformat:GL_RGBA;
45e9809aff7304721fddb95654901b32195c9c7avboxsync format = packspu_CheckTexImageFormat(format) ? format:GL_RGBA;
45e9809aff7304721fddb95654901b32195c9c7avboxsync type = packspu_CheckTexImageType(type) ? type:GL_UNSIGNED_BYTE;
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackTexImage1DSWAP( target, level, internalformat, width, border, format, type, pixels, &(clientState->unpack) );
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackTexImage1D( target, level, internalformat, width, border, format, type, pixels, &(clientState->unpack) );
45e9809aff7304721fddb95654901b32195c9c7avboxsyncvoid PACKSPU_APIENTRY packspu_TexImage2D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels )
45e9809aff7304721fddb95654901b32195c9c7avboxsync CRClientState *clientState = &(ctx->clientState->client);
45e9809aff7304721fddb95654901b32195c9c7avboxsync if (!packspu_CheckTexImageParams(internalformat, format, type))
45e9809aff7304721fddb95654901b32195c9c7avboxsync if (pixels || crStateIsBufferBound(GL_PIXEL_UNPACK_BUFFER_ARB))
45e9809aff7304721fddb95654901b32195c9c7avboxsync crWarning("packspu_TexImage2D invalid internalFormat(%x)/format(%x)/type(%x)", internalformat, format, type);
45e9809aff7304721fddb95654901b32195c9c7avboxsync internalformat = packspu_CheckTexImageInternalFormat(internalformat) ? internalformat:GL_RGBA;
45e9809aff7304721fddb95654901b32195c9c7avboxsync format = packspu_CheckTexImageFormat(format) ? format:GL_RGBA;
45e9809aff7304721fddb95654901b32195c9c7avboxsync type = packspu_CheckTexImageType(type) ? type:GL_UNSIGNED_BYTE;
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackTexImage2DSWAP( target, level, internalformat, width, height, border, format, type, pixels, &(clientState->unpack) );
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackTexImage2D( target, level, internalformat, width, height, border, format, type, pixels, &(clientState->unpack) );
45e9809aff7304721fddb95654901b32195c9c7avboxsyncvoid PACKSPU_APIENTRY packspu_TexImage3DEXT( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels )
45e9809aff7304721fddb95654901b32195c9c7avboxsync CRClientState *clientState = &(ctx->clientState->client);
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackTexImage3DEXTSWAP( target, level, internalformat, width, height, depth, border, format, type, pixels, &(clientState->unpack) );
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackTexImage3DEXT( target, level, internalformat, width, height, depth, border, format, type, pixels, &(clientState->unpack) );
45e9809aff7304721fddb95654901b32195c9c7avboxsyncvoid PACKSPU_APIENTRY packspu_TexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels )
45e9809aff7304721fddb95654901b32195c9c7avboxsync CRClientState *clientState = &(ctx->clientState->client);
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackTexImage3DSWAP( target, level, internalformat, width, height, depth, border, format, type, pixels, &(clientState->unpack) );
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackTexImage3D( target, level, internalformat, width, height, depth, border, format, type, pixels, &(clientState->unpack) );
45e9809aff7304721fddb95654901b32195c9c7avboxsync#endif /* CR_OPENGL_VERSION_1_2 */
45e9809aff7304721fddb95654901b32195c9c7avboxsyncvoid PACKSPU_APIENTRY packspu_TexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels )
45e9809aff7304721fddb95654901b32195c9c7avboxsync CRClientState *clientState = &(ctx->clientState->client);
45e9809aff7304721fddb95654901b32195c9c7avboxsync if (!packspu_CheckTexImageFormatType(format, type))
45e9809aff7304721fddb95654901b32195c9c7avboxsync crWarning("packspu_TexSubImage1D invalid format(%x)/type(%x)", format, type);
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackTexSubImage1DSWAP( target, level, xoffset, width, format, type, pixels, &(clientState->unpack) );
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackTexSubImage1D( target, level, xoffset, width, format, type, pixels, &(clientState->unpack) );
45e9809aff7304721fddb95654901b32195c9c7avboxsyncvoid PACKSPU_APIENTRY packspu_TexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels )
45e9809aff7304721fddb95654901b32195c9c7avboxsync CRClientState *clientState = &(ctx->clientState->client);
45e9809aff7304721fddb95654901b32195c9c7avboxsync if (!packspu_CheckTexImageFormatType(format, type))
45e9809aff7304721fddb95654901b32195c9c7avboxsync crWarning("packspu_TexSubImage2D invalid format(%x)/type(%x)", format, type);
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackTexSubImage2DSWAP( target, level, xoffset, yoffset, width, height, format, type, pixels, &(clientState->unpack) );
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackTexSubImage2D( target, level, xoffset, yoffset, width, height, format, type, pixels, &(clientState->unpack) );
45e9809aff7304721fddb95654901b32195c9c7avboxsyncvoid PACKSPU_APIENTRY packspu_TexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels )
45e9809aff7304721fddb95654901b32195c9c7avboxsync CRClientState *clientState = &(ctx->clientState->client);
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackTexSubImage3DSWAP( target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels, &(clientState->unpack) );
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackTexSubImage3D( target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels, &(clientState->unpack) );
45e9809aff7304721fddb95654901b32195c9c7avboxsync#endif /* CR_OPENGL_VERSION_1_2 */
45e9809aff7304721fddb95654901b32195c9c7avboxsyncvoid PACKSPU_APIENTRY packspu_ZPixCR( GLsizei width, GLsizei height, GLenum format, GLenum type, GLenum ztype, GLint zparm, GLint length, const GLvoid *pixels )
45e9809aff7304721fddb95654901b32195c9c7avboxsync CRClientState *clientState = &(ctx->clientState->client);
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackZPixCRSWAP( width, height, format, type, ztype, zparm, length, pixels, &(clientState->unpack) );
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackZPixCR( width, height, format, type, ztype, zparm, length, pixels, &(clientState->unpack) );
45e9809aff7304721fddb95654901b32195c9c7avboxsyncvoid PACKSPU_APIENTRY packspu_GetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels)
45e9809aff7304721fddb95654901b32195c9c7avboxsync CRClientState *clientState = &(ctx->clientState->client);
45e9809aff7304721fddb95654901b32195c9c7avboxsync /* XXX note: we're not observing the pixel pack parameters here.
45e9809aff7304721fddb95654901b32195c9c7avboxsync * To do so, we'd have to allocate a temporary image buffer (how large???)
45e9809aff7304721fddb95654901b32195c9c7avboxsync * and copy the image to the user's buffer using the pixel pack params.
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackGetTexImageSWAP( target, level, format, type, pixels, &(clientState->pack), &writeback );
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackGetTexImage( target, level, format, type, pixels, &(clientState->pack), &writeback );
45e9809aff7304721fddb95654901b32195c9c7avboxsync if (!crStateIsBufferBound(GL_PIXEL_PACK_BUFFER_ARB))
45e9809aff7304721fddb95654901b32195c9c7avboxsyncvoid PACKSPU_APIENTRY packspu_GetCompressedTexImageARB( GLenum target, GLint level, GLvoid * img )
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackGetCompressedTexImageARBSWAP( target, level, img, &writeback );
45e9809aff7304721fddb95654901b32195c9c7avboxsync crPackGetCompressedTexImageARB( target, level, img, &writeback );