cr_texture.h revision 51e7ffc68ae0a6122fcfdc746905b6c7dae2c610
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Copyright (c) 2001, Stanford University
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * All rights reserved.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * See the file LICENSE.txt for information on redistributing this software.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern "C" {
0bebd3a2671042901f1fcceff14f8c58dd397478vboxsync/* Tells state tracker to rely on diff_api to store/load texture images
0bebd3a2671042901f1fcceff14f8c58dd397478vboxsync * and avoid host memory allocation.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint width; /* width, height, depth includes the border */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* The mipmap levels */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue paramsBit[CR_MAX_TEXTURE_UNITS][CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue enable[CR_MAX_TEXTURE_UNITS][CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue current[CR_MAX_TEXTURE_UNITS][CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue objGen[CR_MAX_TEXTURE_UNITS][CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue eyeGen[CR_MAX_TEXTURE_UNITS][CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue genMode[CR_MAX_TEXTURE_UNITS][CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* XXX someday create more bits for texture env state */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue envBit[CR_MAX_TEXTURE_UNITS][CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* Current texture objects (in terms of glBindTexture and glActiveTexture) */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* GL_ARB_texture_env_combine */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLenum combineModeRGB; /* GL_REPLACE, GL_DECAL, GL_ADD, etc. */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLenum combineModeA; /* GL_REPLACE, GL_DECAL, GL_ADD, etc. */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLenum combineSourceRGB[3]; /* GL_PRIMARY_COLOR, GL_TEXTURE, etc. */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLenum combineSourceA[3]; /* GL_PRIMARY_COLOR, GL_TEXTURE, etc. */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLenum combineOperandRGB[3]; /* SRC_COLOR, ONE_MINUS_SRC_COLOR, etc */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLenum combineOperandA[3]; /* SRC_ALPHA, ONE_MINUS_SRC_ALPHA, etc */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* These are only used for glPush/PopAttrib */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* Default texture objects (name = 0) */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* Proxy texture objects */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint maxLevel; /* number of mipmap levels possible: [0..max] */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLboolean broadcastTextures; /*@todo what is it for?*/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* Indicates that we have to resend texture data to GPU on first glMakeCurrent call with owning context */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* Per-texture unit state: */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateTextureInit(CRContext *ctx);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateTextureDestroy(CRContext *ctx);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateTextureFree(CRContext *ctx);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateTextureInitTexture(GLuint name);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(CRTextureObj *) crStateTextureAllocate(GLuint name);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /*void crStateTextureDelete(GLuint name);*/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(CRTextureObj *) crStateTextureGet(GLenum target, GLuint textureid);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(int) crStateTextureGetSize(GLenum target, GLenum level);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(const GLvoid *) crStateTextureGetData(GLenum target, GLenum level);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(int) crStateTextureCheckDirtyImages(CRContext *from, CRContext *to, GLenum target, int textureUnit);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateTextureDiff(CRTextureBits *t, CRbitvalue *bitID,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateTextureSwitch(CRTextureBits *t, CRbitvalue *bitID,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateTextureObjectDiff(CRContext *fromCtx,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateDiffAllTextureObjects( CRContext *g, CRbitvalue *bitID, GLboolean bForceUpdate );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateDeleteTextureObjectData(CRTextureObj *tobj);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crStateDeleteTextureObject(CRTextureObj *tobj);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif /* CR_STATE_TEXTURE_H */