cr_glstate.h revision f53ba2efceac1847585b2052ee98569305e9802d
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync/* Copyright (c) 2001, Stanford University
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * All rights reserved.
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * See the file LICENSE.txt for information on redistributing this software.
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync/* Forward declaration since some of the state/cr_*.h files need the CRContext type */
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncextern "C" {
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * Bit vectors describing GL state
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsynctypedef struct {
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsynctypedef struct _CRSharedState {
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync CRHashTable *textureTable; /* all texture objects */
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync GLint id; /*unique shared state id, it's not always matching some existing context id!*/
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync /* Indicates that we have to resend data to GPU on first glMakeCurrent call with owning context */
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * Chromium version of the state variables in OpenGL
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync /* we keep reference counting of context's makeCurrent for different threads
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * this is primarily needed to avoid having an invalid memory reference in the TLS
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * when the context is assigned to more than one threads and then destroyed from
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * one of those, i.e.
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * 1. Thread1 -> MakeCurrent(ctx1);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * 2. Thread2 -> MakeCurrent(ctx1);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * 3. Thread1 -> Destroy(ctx1);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync * => Thread2 still refers to destroyed ctx1
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync /** For buffering vertices for selection/feedback */
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(CRContext *) crStateCreateContext(const CRLimitsState *limits, GLint visBits, CRContext *share);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(CRContext *) crStateCreateContextEx(const CRLimitsState *limits, GLint visBits, CRContext *share, GLint presetID);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateMakeCurrent(CRContext *ctx);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateDestroyContext(CRContext *ctx);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(GLboolean) crStateEnableDiffOnMakeCurrent(GLboolean fEnable);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateFlushFunc( CRStateFlushFunc ff );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateDiffAPI( SPUDispatchTable *api );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateSetCurrentPointers( CRContext *ctx, CRCurrentStatePointers *current );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateResetCurrentPointers( CRCurrentStatePointers *current );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateSetExtensionString( CRContext *ctx, const GLubyte *extensions );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateDiffContext( CRContext *from, CRContext *to );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateSwitchContext( CRContext *from, CRContext *to );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateApplyFBImage(CRContext *to);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(int32_t) crStateSaveContext(CRContext *pContext, PSSMHANDLE pSSM);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsynctypedef DECLCALLBACK(CRContext*) FNCRSTATE_CONTEXT_GET(void*);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsynctypedef FNCRSTATE_CONTEXT_GET *PFNCRSTATE_CONTEXT_GET;
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(int32_t) crStateLoadContext(CRContext *pContext, CRHashTable * pCtxTable, PFNCRSTATE_CONTEXT_GET pfnCtxGet, PSSMHANDLE pSSM);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) crStateFreeShared(CRSharedState *s);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync /* XXX move these! */
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsynccrStateChromiumParameteriCR( GLenum target, GLint value );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsynccrStateChromiumParameterfCR( GLenum target, GLfloat value );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsynccrStateChromiumParametervCR( GLenum target, GLenum type, GLsizei count, const GLvoid *values );
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsynccrStateGetChromiumParametervCR( GLenum target, GLuint index, GLenum type,
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsynccrStateReadPixels( GLint x, GLint y, GLsizei width, GLsizei height,
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) STATE_APIENTRY crStateShareContext(GLboolean value);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) STATE_APIENTRY crStateSetSharedContext(CRContext *pCtx);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(GLboolean) STATE_APIENTRY crStateContextIsShared(CRContext *pCtx);
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsyncDECLEXPORT(void) STATE_APIENTRY crStateQueryHWState();
9c9df2b728333cb734a7cc7856568e9ea9dc4600vboxsync#endif /* CR_GLSTATE_H */