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.
af8d59d05d72f134aeea62712f1286b369807d52vboxsync#if defined(CR_ARB_pixel_buffer_object) && !defined(CR_STATE_NO_TEXTURE_IMAGE_STORE)
af8d59d05d72f134aeea62712f1286b369807d52vboxsync#error CR_ARB_pixel_buffer_object not supported without CR_STATE_NO_TEXTURE_IMAGE_STORE
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLint width; /* width, height, depth includes the border */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* The mipmap levels */
4bf357e9215bcc257ba2a5e13ef1f083053cfeb9vboxsync GLboolean pinned; /* <- keep the texture alive if its ctxUsage reaches zero */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue paramsBit[CR_MAX_TEXTURE_UNITS][CR_MAX_BITARRAY];
7f3bb583c97fd6f88c66f0047f1cd465afffefb4vboxsync /* bitfield representing the object usage. 1 means the object is used by the context with the given bitid */
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 /* 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);
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsyncDECLEXPORT(GLuint) STATE_APIENTRY crStateTextureHWIDtoID(GLuint hwid);
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsyncDECLEXPORT(GLuint) STATE_APIENTRY crStateGetTextureHWID(GLuint id);
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsyncDECLEXPORT(GLuint) STATE_APIENTRY crStateGetTextureObjHWID(CRTextureObj *tobj);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif /* CR_STATE_TEXTURE_H */