mirror of
https://github.com/mapbase-source/source-sdk-2013.git
synced 2024-12-27 07:15:31 +03:00
Fix some accidental new-line stomping.
This commit is contained in:
parent
45cc6eccbc
commit
27d9df18d1
@ -1,99 +1,99 @@
|
|||||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
//
|
//
|
||||||
// cglmprogram.h
|
// cglmprogram.h
|
||||||
// GLMgr buffers (index / vertex)
|
// GLMgr buffers (index / vertex)
|
||||||
// ... maybe add PBO later as well
|
// ... maybe add PBO later as well
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
#ifndef CGLMBUFFER_H
|
#ifndef CGLMBUFFER_H
|
||||||
#define CGLMBUFFER_H
|
#define CGLMBUFFER_H
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// ext links
|
// ext links
|
||||||
|
|
||||||
// http://www.opengl.org/registry/specs/ARB/vertex_buffer_object.txt
|
// http://www.opengl.org/registry/specs/ARB/vertex_buffer_object.txt
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// tokens not in the SDK headers
|
// tokens not in the SDK headers
|
||||||
|
|
||||||
//#ifndef GL_DEPTH_STENCIL_ATTACHMENT_EXT
|
//#ifndef GL_DEPTH_STENCIL_ATTACHMENT_EXT
|
||||||
// #define GL_DEPTH_STENCIL_ATTACHMENT_EXT 0x84F9
|
// #define GL_DEPTH_STENCIL_ATTACHMENT_EXT 0x84F9
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// forward declarations
|
// forward declarations
|
||||||
|
|
||||||
class GLMContext;
|
class GLMContext;
|
||||||
|
|
||||||
enum EGLMBufferType
|
enum EGLMBufferType
|
||||||
{
|
{
|
||||||
kGLMVertexBuffer,
|
kGLMVertexBuffer,
|
||||||
kGLMIndexBuffer,
|
kGLMIndexBuffer,
|
||||||
kGLMUniformBuffer, // for bindable uniform
|
kGLMUniformBuffer, // for bindable uniform
|
||||||
kGLMPixelBuffer, // for PBO
|
kGLMPixelBuffer, // for PBO
|
||||||
|
|
||||||
kGLMNumBufferTypes
|
kGLMNumBufferTypes
|
||||||
};
|
};
|
||||||
|
|
||||||
// pass this in "options" to constructor to make a dynamic buffer
|
// pass this in "options" to constructor to make a dynamic buffer
|
||||||
#define GLMBufferOptionDynamic 0x00000001
|
#define GLMBufferOptionDynamic 0x00000001
|
||||||
|
|
||||||
struct GLMBuffLockParams
|
struct GLMBuffLockParams
|
||||||
{
|
{
|
||||||
uint m_offset;
|
uint m_offset;
|
||||||
uint m_size;
|
uint m_size;
|
||||||
bool m_nonblocking;
|
bool m_nonblocking;
|
||||||
bool m_discard;
|
bool m_discard;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CGLMBuffer
|
class CGLMBuffer
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void Lock( GLMBuffLockParams *params, char **addressOut );
|
void Lock( GLMBuffLockParams *params, char **addressOut );
|
||||||
void Unlock( void );
|
void Unlock( void );
|
||||||
|
|
||||||
//protected:
|
//protected:
|
||||||
friend class GLMContext; // only GLMContext can make CGLMBuffer objects
|
friend class GLMContext; // only GLMContext can make CGLMBuffer objects
|
||||||
friend class GLMTester;
|
friend class GLMTester;
|
||||||
friend class IDirect3D9;
|
friend class IDirect3D9;
|
||||||
friend class IDirect3DDevice9;
|
friend class IDirect3DDevice9;
|
||||||
|
|
||||||
CGLMBuffer ( GLMContext *ctx, EGLMBufferType type, uint size, uint options );
|
CGLMBuffer ( GLMContext *ctx, EGLMBufferType type, uint size, uint options );
|
||||||
~CGLMBuffer ( );
|
~CGLMBuffer ( );
|
||||||
|
|
||||||
void SetModes ( bool asyncMap, bool explicitFlush, bool force = false );
|
void SetModes ( bool asyncMap, bool explicitFlush, bool force = false );
|
||||||
void FlushRange ( uint offset, uint size );
|
void FlushRange ( uint offset, uint size );
|
||||||
|
|
||||||
GLMContext *m_ctx; // link back to parent context
|
GLMContext *m_ctx; // link back to parent context
|
||||||
EGLMBufferType m_type;
|
EGLMBufferType m_type;
|
||||||
uint m_size;
|
uint m_size;
|
||||||
GLenum m_buffGLTarget; // GL_ARRAY_BUFFER_ARB / GL_ELEMENT_BUFFER_ARB
|
GLenum m_buffGLTarget; // GL_ARRAY_BUFFER_ARB / GL_ELEMENT_BUFFER_ARB
|
||||||
GLuint m_name; // name of this program in the context
|
GLuint m_name; // name of this program in the context
|
||||||
uint m_revision; // bump anytime the size changes or buffer is orphaned
|
uint m_revision; // bump anytime the size changes or buffer is orphaned
|
||||||
bool m_enableAsyncMap; // mirror of the buffer state
|
bool m_enableAsyncMap; // mirror of the buffer state
|
||||||
bool m_enableExplicitFlush; // mirror of the buffer state
|
bool m_enableExplicitFlush; // mirror of the buffer state
|
||||||
|
|
||||||
bool m_bound; // true if bound to context
|
bool m_bound; // true if bound to context
|
||||||
bool m_mapped; // is it currently mapped
|
bool m_mapped; // is it currently mapped
|
||||||
uint m_dirtyMinOffset; // when equal, range is empty
|
uint m_dirtyMinOffset; // when equal, range is empty
|
||||||
uint m_dirtyMaxOffset;
|
uint m_dirtyMaxOffset;
|
||||||
|
|
||||||
float *m_lastMappedAddress;
|
float *m_lastMappedAddress;
|
||||||
|
|
||||||
// --------------------- pseudo-VBO support below here (explicitly for dynamic index buffers)
|
// --------------------- pseudo-VBO support below here (explicitly for dynamic index buffers)
|
||||||
bool m_pseudo; // true if the m_name is 0, and the backing is plain RAM
|
bool m_pseudo; // true if the m_name is 0, and the backing is plain RAM
|
||||||
|
|
||||||
// in pseudo mode, there is just one RAM buffer that acts as the backing.
|
// in pseudo mode, there is just one RAM buffer that acts as the backing.
|
||||||
// expectation is that this mode would only be used for dynamic indices.
|
// expectation is that this mode would only be used for dynamic indices.
|
||||||
// since indices have to be consumed (copied to command stream) prior to return from a drawing call,
|
// since indices have to be consumed (copied to command stream) prior to return from a drawing call,
|
||||||
// there's no need to do any fencing or multibuffering. orphaning in particular becomes a no-op.
|
// there's no need to do any fencing or multibuffering. orphaning in particular becomes a no-op.
|
||||||
|
|
||||||
char *m_pseudoBuf; // storage for pseudo buffer
|
char *m_pseudoBuf; // storage for pseudo buffer
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -1,91 +1,91 @@
|
|||||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
//
|
//
|
||||||
// cglmfbo.h
|
// cglmfbo.h
|
||||||
// GLMgr FBO's (render targets)
|
// GLMgr FBO's (render targets)
|
||||||
//
|
//
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
#ifndef CGLMFBO_H
|
#ifndef CGLMFBO_H
|
||||||
#define CGLMFBO_H
|
#define CGLMFBO_H
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "togl/rendermechanism.h"
|
#include "togl/rendermechanism.h"
|
||||||
|
|
||||||
// good FBO references / recaps
|
// good FBO references / recaps
|
||||||
// http://www.songho.ca/opengl/gl_fbo.html
|
// http://www.songho.ca/opengl/gl_fbo.html
|
||||||
// http://www.gamedev.net/reference/articles/article2331.asp
|
// http://www.gamedev.net/reference/articles/article2331.asp
|
||||||
|
|
||||||
// ext links
|
// ext links
|
||||||
|
|
||||||
// http://www.opengl.org/registry/specs/EXT/framebuffer_object.txt
|
// http://www.opengl.org/registry/specs/EXT/framebuffer_object.txt
|
||||||
// http://www.opengl.org/registry/specs/EXT/framebuffer_multisample.txt
|
// http://www.opengl.org/registry/specs/EXT/framebuffer_multisample.txt
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// tokens not in the SDK headers
|
// tokens not in the SDK headers
|
||||||
|
|
||||||
#ifndef GL_DEPTH_STENCIL_ATTACHMENT_EXT
|
#ifndef GL_DEPTH_STENCIL_ATTACHMENT_EXT
|
||||||
#define GL_DEPTH_STENCIL_ATTACHMENT_EXT 0x84F9
|
#define GL_DEPTH_STENCIL_ATTACHMENT_EXT 0x84F9
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// forward declarations
|
// forward declarations
|
||||||
|
|
||||||
class GLMContext;
|
class GLMContext;
|
||||||
|
|
||||||
// implicitly 16 maximum color attachments possible
|
// implicitly 16 maximum color attachments possible
|
||||||
enum EGLMFBOAttachment {
|
enum EGLMFBOAttachment {
|
||||||
kAttColor0, kAttColor1, kAttColor2, kAttColor3,
|
kAttColor0, kAttColor1, kAttColor2, kAttColor3,
|
||||||
kAttColor4, kAttColor5, kAttColor6, kAttColor7,
|
kAttColor4, kAttColor5, kAttColor6, kAttColor7,
|
||||||
kAttColor8, kAttColor9, kAttColor10, kAttColor11,
|
kAttColor8, kAttColor9, kAttColor10, kAttColor11,
|
||||||
kAttColor12, kAttColor13, kAttColor14, kAttColor15,
|
kAttColor12, kAttColor13, kAttColor14, kAttColor15,
|
||||||
kAttDepth, kAttStencil, kAttDepthStencil,
|
kAttDepth, kAttStencil, kAttDepthStencil,
|
||||||
kAttCount
|
kAttCount
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GLMFBOTexAttachParams
|
struct GLMFBOTexAttachParams
|
||||||
{
|
{
|
||||||
CGLMTex *m_tex;
|
CGLMTex *m_tex;
|
||||||
int m_face; // keep zero if not cube map
|
int m_face; // keep zero if not cube map
|
||||||
int m_mip; // keep zero if notmip mapped
|
int m_mip; // keep zero if notmip mapped
|
||||||
int m_zslice; // keep zero if not a 3D tex
|
int m_zslice; // keep zero if not a 3D tex
|
||||||
};
|
};
|
||||||
|
|
||||||
class CGLMFBO
|
class CGLMFBO
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class GLMContext; // only GLMContext can make CGLMFBO objects
|
friend class GLMContext; // only GLMContext can make CGLMFBO objects
|
||||||
friend class GLMTester;
|
friend class GLMTester;
|
||||||
friend class CGLMTex;
|
friend class CGLMTex;
|
||||||
|
|
||||||
friend class IDirect3D9;
|
friend class IDirect3D9;
|
||||||
friend class IDirect3DDevice9;
|
friend class IDirect3DDevice9;
|
||||||
|
|
||||||
CGLMFBO( GLMContext *ctx );
|
CGLMFBO( GLMContext *ctx );
|
||||||
~CGLMFBO( );
|
~CGLMFBO( );
|
||||||
|
|
||||||
void TexAttach( GLMFBOTexAttachParams *params, EGLMFBOAttachment attachIndex, GLenum fboBindPoint = GL_FRAMEBUFFER_EXT );
|
void TexAttach( GLMFBOTexAttachParams *params, EGLMFBOAttachment attachIndex, GLenum fboBindPoint = GL_FRAMEBUFFER_EXT );
|
||||||
void TexDetach( EGLMFBOAttachment attachIndex, GLenum fboBindPoint = GL_FRAMEBUFFER_EXT );
|
void TexDetach( EGLMFBOAttachment attachIndex, GLenum fboBindPoint = GL_FRAMEBUFFER_EXT );
|
||||||
// you can also pass GL_READ_FRAMEBUFFER_EXT or GL_DRAW_FRAMEBUFFER_EXT to selectively bind the receiving FBO to one or the other.
|
// you can also pass GL_READ_FRAMEBUFFER_EXT or GL_DRAW_FRAMEBUFFER_EXT to selectively bind the receiving FBO to one or the other.
|
||||||
|
|
||||||
void TexScrub( CGLMTex *tex );
|
void TexScrub( CGLMTex *tex );
|
||||||
// search and destroy any attachment for the named texture
|
// search and destroy any attachment for the named texture
|
||||||
|
|
||||||
bool IsReady( void ); // aka FBO completeness check - ready to draw
|
bool IsReady( void ); // aka FBO completeness check - ready to draw
|
||||||
|
|
||||||
GLMContext *m_ctx; // link back to parent context
|
GLMContext *m_ctx; // link back to parent context
|
||||||
|
|
||||||
GLuint m_name; // name of this FBO in the context
|
GLuint m_name; // name of this FBO in the context
|
||||||
|
|
||||||
GLMFBOTexAttachParams m_attach[ kAttCount ]; // indexed by EGLMFBOAttachment
|
GLMFBOTexAttachParams m_attach[ kAttCount ]; // indexed by EGLMFBOAttachment
|
||||||
|
|
||||||
int m_sizeX,m_sizeY;
|
int m_sizeX,m_sizeY;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,291 +1,291 @@
|
|||||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
//
|
//
|
||||||
// cglmprogram.h
|
// cglmprogram.h
|
||||||
// GLMgr programs (ARBVP/ARBfp)
|
// GLMgr programs (ARBVP/ARBfp)
|
||||||
//
|
//
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
#ifndef CGLMPROGRAM_H
|
#ifndef CGLMPROGRAM_H
|
||||||
#define CGLMPROGRAM_H
|
#define CGLMPROGRAM_H
|
||||||
|
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// good ARB program references
|
// good ARB program references
|
||||||
// http://petewarden.com/notes/archives/2005/05/fragment_progra_2.html
|
// http://petewarden.com/notes/archives/2005/05/fragment_progra_2.html
|
||||||
// http://petewarden.com/notes/archives/2005/06/fragment_progra_3.html
|
// http://petewarden.com/notes/archives/2005/06/fragment_progra_3.html
|
||||||
|
|
||||||
// ext links
|
// ext links
|
||||||
|
|
||||||
// http://www.opengl.org/registry/specs/ARB/vertex_program.txt
|
// http://www.opengl.org/registry/specs/ARB/vertex_program.txt
|
||||||
// http://www.opengl.org/registry/specs/ARB/fragment_program.txt
|
// http://www.opengl.org/registry/specs/ARB/fragment_program.txt
|
||||||
// http://www.opengl.org/registry/specs/EXT/gpu_program_parameters.txt
|
// http://www.opengl.org/registry/specs/EXT/gpu_program_parameters.txt
|
||||||
|
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// tokens not in the SDK headers
|
// tokens not in the SDK headers
|
||||||
|
|
||||||
//#ifndef GL_DEPTH_STENCIL_ATTACHMENT_EXT
|
//#ifndef GL_DEPTH_STENCIL_ATTACHMENT_EXT
|
||||||
// #define GL_DEPTH_STENCIL_ATTACHMENT_EXT 0x84F9
|
// #define GL_DEPTH_STENCIL_ATTACHMENT_EXT 0x84F9
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// forward declarations
|
// forward declarations
|
||||||
|
|
||||||
class GLMContext;
|
class GLMContext;
|
||||||
class CGLMShaderPair;
|
class CGLMShaderPair;
|
||||||
class CGLMShaderPairCache;
|
class CGLMShaderPairCache;
|
||||||
|
|
||||||
// CGLMProgram can contain two flavors of the same program, one in assembler, one in GLSL.
|
// CGLMProgram can contain two flavors of the same program, one in assembler, one in GLSL.
|
||||||
// these flavors are pretty different in terms of the API's that are used to activate them -
|
// these flavors are pretty different in terms of the API's that are used to activate them -
|
||||||
// for example, assembler programs can just get bound to the context, whereas GLSL programs
|
// for example, assembler programs can just get bound to the context, whereas GLSL programs
|
||||||
// have to be linked. To some extent we try to hide that detail inside GLM.
|
// have to be linked. To some extent we try to hide that detail inside GLM.
|
||||||
|
|
||||||
// for now, make CGLMProgram a container, it does not set policy or hold a preference as to which
|
// for now, make CGLMProgram a container, it does not set policy or hold a preference as to which
|
||||||
// flavor you want to use. GLMContext has to handle that.
|
// flavor you want to use. GLMContext has to handle that.
|
||||||
|
|
||||||
enum EGLMProgramType
|
enum EGLMProgramType
|
||||||
{
|
{
|
||||||
kGLMVertexProgram,
|
kGLMVertexProgram,
|
||||||
kGLMFragmentProgram,
|
kGLMFragmentProgram,
|
||||||
|
|
||||||
kGLMNumProgramTypes
|
kGLMNumProgramTypes
|
||||||
};
|
};
|
||||||
|
|
||||||
enum EGLMProgramLang
|
enum EGLMProgramLang
|
||||||
{
|
{
|
||||||
kGLMARB,
|
kGLMARB,
|
||||||
kGLMGLSL,
|
kGLMGLSL,
|
||||||
|
|
||||||
kGLMNumProgramLangs
|
kGLMNumProgramLangs
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GLMShaderDesc
|
struct GLMShaderDesc
|
||||||
{
|
{
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
GLuint arb; // ARB program object name
|
GLuint arb; // ARB program object name
|
||||||
GLhandleARB glsl; // GLSL shader object handle (void*)
|
GLhandleARB glsl; // GLSL shader object handle (void*)
|
||||||
} m_object;
|
} m_object;
|
||||||
|
|
||||||
// these can change if shader text is edited
|
// these can change if shader text is edited
|
||||||
bool m_textPresent; // is this flavor(lang) of text present in the buffer?
|
bool m_textPresent; // is this flavor(lang) of text present in the buffer?
|
||||||
int m_textOffset; // where is it
|
int m_textOffset; // where is it
|
||||||
int m_textLength; // how big
|
int m_textLength; // how big
|
||||||
|
|
||||||
bool m_compiled; // has this text been through a compile attempt
|
bool m_compiled; // has this text been through a compile attempt
|
||||||
bool m_valid; // and if so, was the compile successful
|
bool m_valid; // and if so, was the compile successful
|
||||||
|
|
||||||
int m_slowMark; // has it been flagged during a non native draw batch before. increment every time it's slow.
|
int m_slowMark; // has it been flagged during a non native draw batch before. increment every time it's slow.
|
||||||
|
|
||||||
int m_highWater; // vount of vec4's in the major uniform array ("vc" on vs, "pc" on ps)
|
int m_highWater; // vount of vec4's in the major uniform array ("vc" on vs, "pc" on ps)
|
||||||
// written by dxabstract.... gross!
|
// written by dxabstract.... gross!
|
||||||
};
|
};
|
||||||
|
|
||||||
GLenum GLMProgTypeToARBEnum( EGLMProgramType type ); // map vert/frag to ARB asm bind target
|
GLenum GLMProgTypeToARBEnum( EGLMProgramType type ); // map vert/frag to ARB asm bind target
|
||||||
GLenum GLMProgTypeToGLSLEnum( EGLMProgramType type ); // map vert/frag to ARB asm bind target
|
GLenum GLMProgTypeToGLSLEnum( EGLMProgramType type ); // map vert/frag to ARB asm bind target
|
||||||
|
|
||||||
class CGLMProgram
|
class CGLMProgram
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
friend class CGLMShaderPairCache;
|
friend class CGLMShaderPairCache;
|
||||||
friend class CGLMShaderPair;
|
friend class CGLMShaderPair;
|
||||||
friend class GLMContext; // only GLMContext can make CGLMProgram objects
|
friend class GLMContext; // only GLMContext can make CGLMProgram objects
|
||||||
friend class GLMTester;
|
friend class GLMTester;
|
||||||
friend class IDirect3D9;
|
friend class IDirect3D9;
|
||||||
friend class IDirect3DDevice9;
|
friend class IDirect3DDevice9;
|
||||||
|
|
||||||
//===============================
|
//===============================
|
||||||
|
|
||||||
// constructor is very light, it just makes one empty program object per flavor.
|
// constructor is very light, it just makes one empty program object per flavor.
|
||||||
CGLMProgram( GLMContext *ctx, EGLMProgramType type );
|
CGLMProgram( GLMContext *ctx, EGLMProgramType type );
|
||||||
~CGLMProgram( );
|
~CGLMProgram( );
|
||||||
|
|
||||||
void SetProgramText ( char *text ); // import text to GLM object - invalidate any prev compiled program
|
void SetProgramText ( char *text ); // import text to GLM object - invalidate any prev compiled program
|
||||||
|
|
||||||
bool CompileActiveSources ( void ); // compile only the flavors that were provided.
|
bool CompileActiveSources ( void ); // compile only the flavors that were provided.
|
||||||
bool Compile ( EGLMProgramLang lang );
|
bool Compile ( EGLMProgramLang lang );
|
||||||
bool CheckValidity ( EGLMProgramLang lang );
|
bool CheckValidity ( EGLMProgramLang lang );
|
||||||
|
|
||||||
void LogSlow ( EGLMProgramLang lang ); // detailed spew when called for first time; one liner or perhaps silence after that
|
void LogSlow ( EGLMProgramLang lang ); // detailed spew when called for first time; one liner or perhaps silence after that
|
||||||
|
|
||||||
void GetLabelIndexCombo ( char *labelOut, int labelOutMaxChars, int *indexOut, int *comboOut );
|
void GetLabelIndexCombo ( char *labelOut, int labelOutMaxChars, int *indexOut, int *comboOut );
|
||||||
void GetComboIndexNameString ( char *stringOut, int stringOutMaxChars ); // mmmmmmmm-nnnnnnnn-filename
|
void GetComboIndexNameString ( char *stringOut, int stringOutMaxChars ); // mmmmmmmm-nnnnnnnn-filename
|
||||||
|
|
||||||
#if GLMDEBUG
|
#if GLMDEBUG
|
||||||
bool PollForChanges( void ); // check mirror for changes.
|
bool PollForChanges( void ); // check mirror for changes.
|
||||||
void ReloadStringFromEditable( void ); // populate m_string from editable item (react to change)
|
void ReloadStringFromEditable( void ); // populate m_string from editable item (react to change)
|
||||||
bool SyncWithEditable( void );
|
bool SyncWithEditable( void );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//===============================
|
//===============================
|
||||||
|
|
||||||
// common stuff
|
// common stuff
|
||||||
|
|
||||||
GLMContext *m_ctx; // link back to parent context
|
GLMContext *m_ctx; // link back to parent context
|
||||||
|
|
||||||
EGLMProgramType m_type; // vertex or pixel
|
EGLMProgramType m_type; // vertex or pixel
|
||||||
|
|
||||||
uint m_serial; // serial number for hashing
|
uint m_serial; // serial number for hashing
|
||||||
|
|
||||||
char *m_text; // copy of text passed into constructor. Can change if editable shaders is enabled.
|
char *m_text; // copy of text passed into constructor. Can change if editable shaders is enabled.
|
||||||
// note - it can contain multiple flavors, so use CGLMTextSectioner to scan it and locate them
|
// note - it can contain multiple flavors, so use CGLMTextSectioner to scan it and locate them
|
||||||
#if GLMDEBUG
|
#if GLMDEBUG
|
||||||
CGLMEditableTextItem *m_editable; // editable text item for debugging
|
CGLMEditableTextItem *m_editable; // editable text item for debugging
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GLMShaderDesc m_descs[ kGLMNumProgramLangs ];
|
GLMShaderDesc m_descs[ kGLMNumProgramLangs ];
|
||||||
|
|
||||||
uint m_samplerMask; // (1<<n) mask of sampler active locs, if this is a fragment shader (dxabstract sets this field)
|
uint m_samplerMask; // (1<<n) mask of sampler active locs, if this is a fragment shader (dxabstract sets this field)
|
||||||
};
|
};
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
struct GLMShaderPairInfo
|
struct GLMShaderPairInfo
|
||||||
{
|
{
|
||||||
int m_status; // -1 means req'd index was out of bounds (loop stop..) 0 means not present. 1 means present/active.
|
int m_status; // -1 means req'd index was out of bounds (loop stop..) 0 means not present. 1 means present/active.
|
||||||
|
|
||||||
char m_vsName[ 128 ];
|
char m_vsName[ 128 ];
|
||||||
int m_vsStaticIndex;
|
int m_vsStaticIndex;
|
||||||
int m_vsDynamicIndex;
|
int m_vsDynamicIndex;
|
||||||
|
|
||||||
char m_psName[ 128 ];
|
char m_psName[ 128 ];
|
||||||
int m_psStaticIndex;
|
int m_psStaticIndex;
|
||||||
int m_psDynamicIndex;
|
int m_psDynamicIndex;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class CGLMShaderPair // a container for a linked GLSL shader pair, and metadata obtained post-link
|
class CGLMShaderPair // a container for a linked GLSL shader pair, and metadata obtained post-link
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
friend class CGLMProgram;
|
friend class CGLMProgram;
|
||||||
friend class GLMContext;
|
friend class GLMContext;
|
||||||
friend class CGLMShaderPairCache;
|
friend class CGLMShaderPairCache;
|
||||||
|
|
||||||
//===============================
|
//===============================
|
||||||
|
|
||||||
// constructor just sets up a GLSL program object and leaves it empty.
|
// constructor just sets up a GLSL program object and leaves it empty.
|
||||||
CGLMShaderPair( GLMContext *ctx );
|
CGLMShaderPair( GLMContext *ctx );
|
||||||
~CGLMShaderPair( );
|
~CGLMShaderPair( );
|
||||||
|
|
||||||
bool SetProgramPair ( CGLMProgram *vp, CGLMProgram *fp );
|
bool SetProgramPair ( CGLMProgram *vp, CGLMProgram *fp );
|
||||||
// true result means successful link and query
|
// true result means successful link and query
|
||||||
|
|
||||||
bool RefreshProgramPair ( void );
|
bool RefreshProgramPair ( void );
|
||||||
// re-link and re-query the uniforms
|
// re-link and re-query the uniforms
|
||||||
|
|
||||||
//===============================
|
//===============================
|
||||||
|
|
||||||
// common stuff
|
// common stuff
|
||||||
|
|
||||||
GLMContext *m_ctx; // link back to parent context
|
GLMContext *m_ctx; // link back to parent context
|
||||||
|
|
||||||
CGLMProgram *m_vertexProg;
|
CGLMProgram *m_vertexProg;
|
||||||
CGLMProgram *m_fragmentProg;
|
CGLMProgram *m_fragmentProg;
|
||||||
|
|
||||||
GLhandleARB m_program; // linked program object
|
GLhandleARB m_program; // linked program object
|
||||||
|
|
||||||
// need meta data for attribs / samplers / params
|
// need meta data for attribs / samplers / params
|
||||||
// actually we only need it for samplers and params.
|
// actually we only need it for samplers and params.
|
||||||
// attributes are hardwired.
|
// attributes are hardwired.
|
||||||
|
|
||||||
// vertex stage uniforms
|
// vertex stage uniforms
|
||||||
GLint m_locVertexParams; // "vc" per dx9asmtogl2 convention
|
GLint m_locVertexParams; // "vc" per dx9asmtogl2 convention
|
||||||
GLint m_locVertexInteger0; // "i0"
|
GLint m_locVertexInteger0; // "i0"
|
||||||
GLint m_locVertexBool0; // "b0"
|
GLint m_locVertexBool0; // "b0"
|
||||||
GLint m_locVertexBool1; // "b1"
|
GLint m_locVertexBool1; // "b1"
|
||||||
GLint m_locVertexBool2; // "b2"
|
GLint m_locVertexBool2; // "b2"
|
||||||
GLint m_locVertexBool3; // "b3"
|
GLint m_locVertexBool3; // "b3"
|
||||||
|
|
||||||
// fragment stage uniforms
|
// fragment stage uniforms
|
||||||
GLint m_locFragmentParams; // "pc" per dx9asmtogl2 convention
|
GLint m_locFragmentParams; // "pc" per dx9asmtogl2 convention
|
||||||
GLint m_locFragmentFakeSRGBEnable; // "flSRGBWrite" - set to 1.0 to effect sRGB encoding on output
|
GLint m_locFragmentFakeSRGBEnable; // "flSRGBWrite" - set to 1.0 to effect sRGB encoding on output
|
||||||
float m_fakeSRGBEnableValue; // shadow to avoid redundant sets of the m_locFragmentFakeSRGBEnable uniform
|
float m_fakeSRGBEnableValue; // shadow to avoid redundant sets of the m_locFragmentFakeSRGBEnable uniform
|
||||||
// init it to -1.0 at link or relink, so it will trip on any legit incoming value (0.0 or 1.0)
|
// init it to -1.0 at link or relink, so it will trip on any legit incoming value (0.0 or 1.0)
|
||||||
|
|
||||||
GLint m_locSamplers[ 16 ]; // "sampler0 ... sampler1..."
|
GLint m_locSamplers[ 16 ]; // "sampler0 ... sampler1..."
|
||||||
|
|
||||||
// other stuff
|
// other stuff
|
||||||
bool m_valid; // true on successful link
|
bool m_valid; // true on successful link
|
||||||
bool m_samplersFixed; // set on first draw (can't write the uniforms until the program is in use, and we don't want to mess with cur program inside cglmprogram)
|
bool m_samplersFixed; // set on first draw (can't write the uniforms until the program is in use, and we don't want to mess with cur program inside cglmprogram)
|
||||||
uint m_revision; // if this pair is relinked, bump this number.
|
uint m_revision; // if this pair is relinked, bump this number.
|
||||||
};
|
};
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// N-row, M-way associative cache with LRU per row.
|
// N-row, M-way associative cache with LRU per row.
|
||||||
// still needs some metric dump ability and some parameter tuning.
|
// still needs some metric dump ability and some parameter tuning.
|
||||||
// extra credit would be to make an auto-tuner.
|
// extra credit would be to make an auto-tuner.
|
||||||
|
|
||||||
struct CGLMPairCacheEntry
|
struct CGLMPairCacheEntry
|
||||||
{
|
{
|
||||||
long long m_lastMark; // a mark of zero means an empty entry
|
long long m_lastMark; // a mark of zero means an empty entry
|
||||||
CGLMProgram *m_vertexProg;
|
CGLMProgram *m_vertexProg;
|
||||||
CGLMProgram *m_fragmentProg;
|
CGLMProgram *m_fragmentProg;
|
||||||
uint m_extraKeyBits;
|
uint m_extraKeyBits;
|
||||||
CGLMShaderPair *m_pair;
|
CGLMShaderPair *m_pair;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CGLMShaderPairCache // cache for linked GLSL shader pairs
|
class CGLMShaderPairCache // cache for linked GLSL shader pairs
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class CGLMShaderPair;
|
friend class CGLMShaderPair;
|
||||||
friend class CGLMProgram;
|
friend class CGLMProgram;
|
||||||
friend class GLMContext;
|
friend class GLMContext;
|
||||||
|
|
||||||
//===============================
|
//===============================
|
||||||
|
|
||||||
CGLMShaderPairCache( GLMContext *ctx );
|
CGLMShaderPairCache( GLMContext *ctx );
|
||||||
~CGLMShaderPairCache( );
|
~CGLMShaderPairCache( );
|
||||||
|
|
||||||
CGLMShaderPair *SelectShaderPair ( CGLMProgram *vp, CGLMProgram *fp, uint extraKeyBits );
|
CGLMShaderPair *SelectShaderPair ( CGLMProgram *vp, CGLMProgram *fp, uint extraKeyBits );
|
||||||
void QueryShaderPair ( int index, GLMShaderPairInfo *infoOut );
|
void QueryShaderPair ( int index, GLMShaderPairInfo *infoOut );
|
||||||
|
|
||||||
// shoot down linked pairs that use the program in the arg
|
// shoot down linked pairs that use the program in the arg
|
||||||
// return true if any had to be skipped due to conflict with currently bound pair
|
// return true if any had to be skipped due to conflict with currently bound pair
|
||||||
bool PurgePairsWithShader( CGLMProgram *prog );
|
bool PurgePairsWithShader( CGLMProgram *prog );
|
||||||
|
|
||||||
// purge everything (when would GLM know how to do this ? at context destroy time, but any other times?)
|
// purge everything (when would GLM know how to do this ? at context destroy time, but any other times?)
|
||||||
// return true if any had to be skipped due to conflict with currently bound pair
|
// return true if any had to be skipped due to conflict with currently bound pair
|
||||||
bool Purge ( void );
|
bool Purge ( void );
|
||||||
|
|
||||||
// stats
|
// stats
|
||||||
void DumpStats ( void );
|
void DumpStats ( void );
|
||||||
|
|
||||||
//===============================
|
//===============================
|
||||||
|
|
||||||
uint HashRowIndex ( CGLMProgram *vp, CGLMProgram *fp, uint extraKeyBits );
|
uint HashRowIndex ( CGLMProgram *vp, CGLMProgram *fp, uint extraKeyBits );
|
||||||
CGLMPairCacheEntry* HashRowPtr ( uint hashRowIndex );
|
CGLMPairCacheEntry* HashRowPtr ( uint hashRowIndex );
|
||||||
void HashRowProbe ( CGLMPairCacheEntry *row, CGLMProgram *vp, CGLMProgram *fp, uint extraKeyBits, int *hitwayOut, int *emptywayOut, int *oldestwayOut );
|
void HashRowProbe ( CGLMPairCacheEntry *row, CGLMProgram *vp, CGLMProgram *fp, uint extraKeyBits, int *hitwayOut, int *emptywayOut, int *oldestwayOut );
|
||||||
//===============================
|
//===============================
|
||||||
|
|
||||||
// common stuff
|
// common stuff
|
||||||
|
|
||||||
GLMContext *m_ctx; // link back to parent context
|
GLMContext *m_ctx; // link back to parent context
|
||||||
|
|
||||||
long long m_mark;
|
long long m_mark;
|
||||||
|
|
||||||
uint m_rowsLg2;
|
uint m_rowsLg2;
|
||||||
uint m_rows;
|
uint m_rows;
|
||||||
|
|
||||||
uint m_waysLg2;
|
uint m_waysLg2;
|
||||||
uint m_ways;
|
uint m_ways;
|
||||||
|
|
||||||
uint m_entryCount;
|
uint m_entryCount;
|
||||||
|
|
||||||
CGLMPairCacheEntry *m_entries; // array[ m_rows ][ m_ways ]
|
CGLMPairCacheEntry *m_entries; // array[ m_rows ][ m_ways ]
|
||||||
|
|
||||||
uint *m_evictions; // array[ m_rows ];
|
uint *m_evictions; // array[ m_rows ];
|
||||||
uint *m_hits; // array[ m_rows ];
|
uint *m_hits; // array[ m_rows ];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -1,85 +1,85 @@
|
|||||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
//
|
//
|
||||||
// cglmquery.h
|
// cglmquery.h
|
||||||
// GLMgr queries
|
// GLMgr queries
|
||||||
//
|
//
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
#ifndef CGLMQUERY_H
|
#ifndef CGLMQUERY_H
|
||||||
#define CGLMQUERY_H
|
#define CGLMQUERY_H
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// forward declarations
|
// forward declarations
|
||||||
|
|
||||||
class GLMContext;
|
class GLMContext;
|
||||||
class CGLMQuery;
|
class CGLMQuery;
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
enum EGLMQueryType
|
enum EGLMQueryType
|
||||||
{
|
{
|
||||||
EOcclusion,
|
EOcclusion,
|
||||||
EFence,
|
EFence,
|
||||||
EGLMQueryCount
|
EGLMQueryCount
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GLMQueryParams
|
struct GLMQueryParams
|
||||||
{
|
{
|
||||||
EGLMQueryType m_type;
|
EGLMQueryType m_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CGLMQuery
|
class CGLMQuery
|
||||||
{
|
{
|
||||||
// leave everything public til it's running
|
// leave everything public til it's running
|
||||||
public:
|
public:
|
||||||
friend class GLMContext; // only GLMContext can make CGLMTex objects
|
friend class GLMContext; // only GLMContext can make CGLMTex objects
|
||||||
friend class IDirect3DDevice9;
|
friend class IDirect3DDevice9;
|
||||||
friend class IDirect3DQuery9;
|
friend class IDirect3DQuery9;
|
||||||
|
|
||||||
GLMContext *m_ctx; // link back to parent context
|
GLMContext *m_ctx; // link back to parent context
|
||||||
GLMQueryParams m_params; // params created with
|
GLMQueryParams m_params; // params created with
|
||||||
|
|
||||||
GLuint m_name; // name of the query object per se - could be fence, could be query object ... NOT USED WITH GL_ARB_sync!
|
GLuint m_name; // name of the query object per se - could be fence, could be query object ... NOT USED WITH GL_ARB_sync!
|
||||||
#ifdef HAVE_GL_ARB_SYNC
|
#ifdef HAVE_GL_ARB_SYNC
|
||||||
GLsync m_syncobj; // GL_ARB_sync object. NOT USED WITH GL_NV_fence or GL_APPLE_fence!
|
GLsync m_syncobj; // GL_ARB_sync object. NOT USED WITH GL_NV_fence or GL_APPLE_fence!
|
||||||
#else
|
#else
|
||||||
GLuint m_syncobj;
|
GLuint m_syncobj;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool m_started;
|
bool m_started;
|
||||||
bool m_stopped;
|
bool m_stopped;
|
||||||
bool m_done;
|
bool m_done;
|
||||||
|
|
||||||
bool m_nullQuery; // was gl_nullqueries true at Start time - if so, continue to act like a null query through Stop/IsDone/Complete time
|
bool m_nullQuery; // was gl_nullqueries true at Start time - if so, continue to act like a null query through Stop/IsDone/Complete time
|
||||||
// restated - only Start should examine the convar.
|
// restated - only Start should examine the convar.
|
||||||
|
|
||||||
CGLMQuery( GLMContext *ctx, GLMQueryParams *params );
|
CGLMQuery( GLMContext *ctx, GLMQueryParams *params );
|
||||||
~CGLMQuery( );
|
~CGLMQuery( );
|
||||||
|
|
||||||
// for an occlusion query:
|
// for an occlusion query:
|
||||||
// Start = BeginQuery query-start goes into stream
|
// Start = BeginQuery query-start goes into stream
|
||||||
// Stop = EndQuery query-end goes into stream - a fence is also set so we can probe for completion
|
// Stop = EndQuery query-end goes into stream - a fence is also set so we can probe for completion
|
||||||
// IsDone = TestFence use the added fence to ask if query-end has passed (i.e. will Complete block?)
|
// IsDone = TestFence use the added fence to ask if query-end has passed (i.e. will Complete block?)
|
||||||
// Complete = GetQueryObjectuivARB(uint id, enum pname, uint *params) - extract the sample count
|
// Complete = GetQueryObjectuivARB(uint id, enum pname, uint *params) - extract the sample count
|
||||||
|
|
||||||
// for a fence query:
|
// for a fence query:
|
||||||
// Start = SetFence fence goes into command stream
|
// Start = SetFence fence goes into command stream
|
||||||
// Stop = NOP fences are self finishing - no need to call Stop on a fence
|
// Stop = NOP fences are self finishing - no need to call Stop on a fence
|
||||||
// IsDone = TestFence ask if fence passed
|
// IsDone = TestFence ask if fence passed
|
||||||
// Complete = FinishFence
|
// Complete = FinishFence
|
||||||
|
|
||||||
void Start ( void );
|
void Start ( void );
|
||||||
void Stop ( void );
|
void Stop ( void );
|
||||||
bool IsDone ( void );
|
bool IsDone ( void );
|
||||||
void Complete ( uint *result );
|
void Complete ( uint *result );
|
||||||
|
|
||||||
// accessors for the started/stopped state
|
// accessors for the started/stopped state
|
||||||
bool IsStarted ( void );
|
bool IsStarted ( void );
|
||||||
bool IsStopped ( void );
|
bool IsStopped ( void );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,273 +1,273 @@
|
|||||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
//
|
//
|
||||||
// cglmtex.h
|
// cglmtex.h
|
||||||
// GLMgr textures
|
// GLMgr textures
|
||||||
//
|
//
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
#ifndef CGLMTEX_H
|
#ifndef CGLMTEX_H
|
||||||
#define CGLMTEX_H
|
#define CGLMTEX_H
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "tier1/utlhash.h"
|
#include "tier1/utlhash.h"
|
||||||
#include "tier1/utlmap.h"
|
#include "tier1/utlmap.h"
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// forward declarations
|
// forward declarations
|
||||||
|
|
||||||
class GLMContext;
|
class GLMContext;
|
||||||
class GLMTester;
|
class GLMTester;
|
||||||
class CGLMTexLayoutTable;
|
class CGLMTexLayoutTable;
|
||||||
class CGLMTex;
|
class CGLMTex;
|
||||||
class CGLMFBO;
|
class CGLMFBO;
|
||||||
|
|
||||||
class IDirect3DSurface9;
|
class IDirect3DSurface9;
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
struct GLMTexFormatDesc
|
struct GLMTexFormatDesc
|
||||||
{
|
{
|
||||||
char *m_formatSummary; // for debug visibility
|
char *m_formatSummary; // for debug visibility
|
||||||
|
|
||||||
D3DFORMAT m_d3dFormat; // what D3D knows it as; see public/bitmap/imageformat.h
|
D3DFORMAT m_d3dFormat; // what D3D knows it as; see public/bitmap/imageformat.h
|
||||||
|
|
||||||
GLenum m_glIntFormat; // GL internal format
|
GLenum m_glIntFormat; // GL internal format
|
||||||
GLenum m_glIntFormatSRGB; // internal format if SRGB flavor
|
GLenum m_glIntFormatSRGB; // internal format if SRGB flavor
|
||||||
GLenum m_glDataFormat; // GL data format
|
GLenum m_glDataFormat; // GL data format
|
||||||
GLenum m_glDataType; // GL data type
|
GLenum m_glDataType; // GL data type
|
||||||
|
|
||||||
int m_chunkSize; // 1 or 4 - 4 is used for compressed textures
|
int m_chunkSize; // 1 or 4 - 4 is used for compressed textures
|
||||||
int m_bytesPerSquareChunk; // how many bytes for the smallest quantum (m_chunkSize x m_chunkSize)
|
int m_bytesPerSquareChunk; // how many bytes for the smallest quantum (m_chunkSize x m_chunkSize)
|
||||||
// this description lets us calculate size cleanly without conditional logic for compression
|
// this description lets us calculate size cleanly without conditional logic for compression
|
||||||
};
|
};
|
||||||
const GLMTexFormatDesc *GetFormatDesc( D3DFORMAT format );
|
const GLMTexFormatDesc *GetFormatDesc( D3DFORMAT format );
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// utility function for generating slabs of texels. mostly for test.
|
// utility function for generating slabs of texels. mostly for test.
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
// in
|
// in
|
||||||
D3DFORMAT m_format;
|
D3DFORMAT m_format;
|
||||||
void *m_dest; // dest address
|
void *m_dest; // dest address
|
||||||
int m_chunkCount; // square chunk count (single texels or compressed blocks)
|
int m_chunkCount; // square chunk count (single texels or compressed blocks)
|
||||||
int m_byteCountLimit; // caller expectation of max number of bytes to write out
|
int m_byteCountLimit; // caller expectation of max number of bytes to write out
|
||||||
float r,g,b,a; // color desired
|
float r,g,b,a; // color desired
|
||||||
|
|
||||||
// out
|
// out
|
||||||
int m_bytesWritten;
|
int m_bytesWritten;
|
||||||
} GLMGenTexelParams;
|
} GLMGenTexelParams;
|
||||||
|
|
||||||
// return true if successful
|
// return true if successful
|
||||||
bool GLMGenTexels( GLMGenTexelParams *params );
|
bool GLMGenTexels( GLMGenTexelParams *params );
|
||||||
|
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
struct GLMTexLayoutSlice
|
struct GLMTexLayoutSlice
|
||||||
{
|
{
|
||||||
int m_xSize,m_ySize,m_zSize; //texel dimensions of this slice
|
int m_xSize,m_ySize,m_zSize; //texel dimensions of this slice
|
||||||
int m_storageOffset; //where in the storage slab does this slice live
|
int m_storageOffset; //where in the storage slab does this slice live
|
||||||
int m_storageSize; //how much storage does this slice occupy
|
int m_storageSize; //how much storage does this slice occupy
|
||||||
};
|
};
|
||||||
|
|
||||||
enum EGLMTexFlags
|
enum EGLMTexFlags
|
||||||
{
|
{
|
||||||
kGLMTexMipped = 0x01,
|
kGLMTexMipped = 0x01,
|
||||||
kGLMTexMippedAuto = 0x02,
|
kGLMTexMippedAuto = 0x02,
|
||||||
kGLMTexRenderable = 0x04,
|
kGLMTexRenderable = 0x04,
|
||||||
kGLMTexIsStencil = 0x08,
|
kGLMTexIsStencil = 0x08,
|
||||||
kGLMTexIsDepth = 0x10,
|
kGLMTexIsDepth = 0x10,
|
||||||
kGLMTexSRGB = 0x20,
|
kGLMTexSRGB = 0x20,
|
||||||
kGLMTexMultisampled = 0x40, // has an RBO backing it. Cannot combine with Mipped, MippedAuto. One slice maximum, only targeting GL_TEXTURE_2D.
|
kGLMTexMultisampled = 0x40, // has an RBO backing it. Cannot combine with Mipped, MippedAuto. One slice maximum, only targeting GL_TEXTURE_2D.
|
||||||
// actually not 100% positive on the mipmapping, the RBO itself can't be mipped, but the resulting texture could
|
// actually not 100% positive on the mipmapping, the RBO itself can't be mipped, but the resulting texture could
|
||||||
// have mipmaps generated.
|
// have mipmaps generated.
|
||||||
};
|
};
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
struct GLMTexLayoutKey
|
struct GLMTexLayoutKey
|
||||||
{
|
{
|
||||||
// input values: held const, these are the hash key for the form map
|
// input values: held const, these are the hash key for the form map
|
||||||
GLenum m_texGLTarget; // flavor of texture: GL_TEXTURE_2D, GL_TEXTURE_3D, GLTEXTURE_CUBE_MAP
|
GLenum m_texGLTarget; // flavor of texture: GL_TEXTURE_2D, GL_TEXTURE_3D, GLTEXTURE_CUBE_MAP
|
||||||
D3DFORMAT m_texFormat; // D3D texel format
|
D3DFORMAT m_texFormat; // D3D texel format
|
||||||
unsigned long m_texFlags; // mipped, autogen mips, render target, ... ?
|
unsigned long m_texFlags; // mipped, autogen mips, render target, ... ?
|
||||||
unsigned long m_texSamples; // zero for a plain tex, 2/4/6/8 for "MSAA tex" (RBO backed)
|
unsigned long m_texSamples; // zero for a plain tex, 2/4/6/8 for "MSAA tex" (RBO backed)
|
||||||
int m_xSize,m_ySize,m_zSize; // size of base mip
|
int m_xSize,m_ySize,m_zSize; // size of base mip
|
||||||
};
|
};
|
||||||
|
|
||||||
bool LessFunc_GLMTexLayoutKey( const GLMTexLayoutKey &a, const GLMTexLayoutKey &b );
|
bool LessFunc_GLMTexLayoutKey( const GLMTexLayoutKey &a, const GLMTexLayoutKey &b );
|
||||||
|
|
||||||
#define GLM_TEX_MAX_MIPS 14
|
#define GLM_TEX_MAX_MIPS 14
|
||||||
#define GLM_TEX_MAX_FACES 6
|
#define GLM_TEX_MAX_FACES 6
|
||||||
#define GLM_TEX_MAX_SLICES (GLM_TEX_MAX_MIPS * GLM_TEX_MAX_FACES)
|
#define GLM_TEX_MAX_SLICES (GLM_TEX_MAX_MIPS * GLM_TEX_MAX_FACES)
|
||||||
|
|
||||||
struct GLMTexLayout
|
struct GLMTexLayout
|
||||||
{
|
{
|
||||||
char *m_layoutSummary; // for debug visibility
|
char *m_layoutSummary; // for debug visibility
|
||||||
|
|
||||||
// const inputs used for hashing
|
// const inputs used for hashing
|
||||||
GLMTexLayoutKey m_key;
|
GLMTexLayoutKey m_key;
|
||||||
|
|
||||||
// refcount
|
// refcount
|
||||||
int m_refCount;
|
int m_refCount;
|
||||||
|
|
||||||
// derived values:
|
// derived values:
|
||||||
GLMTexFormatDesc *m_format; // format specific info
|
GLMTexFormatDesc *m_format; // format specific info
|
||||||
int m_mipCount; // derived by starying at base size and working down towards 1x1
|
int m_mipCount; // derived by starying at base size and working down towards 1x1
|
||||||
int m_faceCount; // 1 for 2d/3d, 6 for cubemap
|
int m_faceCount; // 1 for 2d/3d, 6 for cubemap
|
||||||
int m_sliceCount; // product of faces and mips
|
int m_sliceCount; // product of faces and mips
|
||||||
int m_storageTotalSize; // size of storage slab required
|
int m_storageTotalSize; // size of storage slab required
|
||||||
|
|
||||||
// slice array
|
// slice array
|
||||||
GLMTexLayoutSlice m_slices[0]; // dynamically allocated 2-d array [faces][mips]
|
GLMTexLayoutSlice m_slices[0]; // dynamically allocated 2-d array [faces][mips]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class CGLMTexLayoutTable
|
class CGLMTexLayoutTable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CGLMTexLayoutTable();
|
CGLMTexLayoutTable();
|
||||||
|
|
||||||
GLMTexLayout *NewLayoutRef( GLMTexLayoutKey *key ); // pass in a pointer to layout key - receive ptr to completed layout
|
GLMTexLayout *NewLayoutRef( GLMTexLayoutKey *key ); // pass in a pointer to layout key - receive ptr to completed layout
|
||||||
void DelLayoutRef( GLMTexLayout *layout ); // pass in pointer to completed layout. refcount is dropped.
|
void DelLayoutRef( GLMTexLayout *layout ); // pass in pointer to completed layout. refcount is dropped.
|
||||||
|
|
||||||
void DumpStats( void );
|
void DumpStats( void );
|
||||||
protected:
|
protected:
|
||||||
CUtlMap< GLMTexLayoutKey, GLMTexLayout* > m_layoutMap;
|
CUtlMap< GLMTexLayoutKey, GLMTexLayout* > m_layoutMap;
|
||||||
};
|
};
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// a sampler specifies desired state for drawing on a given sampler index
|
// a sampler specifies desired state for drawing on a given sampler index
|
||||||
// this is the combination of a texture choice and a set of sampler parameters
|
// this is the combination of a texture choice and a set of sampler parameters
|
||||||
// see http://msdn.microsoft.com/en-us/library/bb172602(VS.85).aspx
|
// see http://msdn.microsoft.com/en-us/library/bb172602(VS.85).aspx
|
||||||
|
|
||||||
|
|
||||||
struct GLMTexSamplingParams
|
struct GLMTexSamplingParams
|
||||||
{
|
{
|
||||||
GLenum m_addressModes[3]; // S, T, R
|
GLenum m_addressModes[3]; // S, T, R
|
||||||
GLfloat m_borderColor[4]; // R,G,B,A
|
GLfloat m_borderColor[4]; // R,G,B,A
|
||||||
|
|
||||||
GLenum m_magFilter;
|
GLenum m_magFilter;
|
||||||
GLenum m_minFilter;
|
GLenum m_minFilter;
|
||||||
|
|
||||||
GLfloat m_mipmapBias;
|
GLfloat m_mipmapBias;
|
||||||
GLint m_minMipLevel;
|
GLint m_minMipLevel;
|
||||||
GLint m_maxMipLevel;
|
GLint m_maxMipLevel;
|
||||||
GLint m_maxAniso;
|
GLint m_maxAniso;
|
||||||
GLenum m_compareMode; // only used for depth and stencil type textures
|
GLenum m_compareMode; // only used for depth and stencil type textures
|
||||||
bool m_srgb; // srgb texture read...
|
bool m_srgb; // srgb texture read...
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GLMTexLockParams
|
struct GLMTexLockParams
|
||||||
{
|
{
|
||||||
// input params which identify the slice of interest
|
// input params which identify the slice of interest
|
||||||
CGLMTex *m_tex;
|
CGLMTex *m_tex;
|
||||||
int m_face;
|
int m_face;
|
||||||
int m_mip;
|
int m_mip;
|
||||||
|
|
||||||
// identifies the region of the slice
|
// identifies the region of the slice
|
||||||
GLMRegion m_region;
|
GLMRegion m_region;
|
||||||
|
|
||||||
// tells GLM to force re-read of the texels back from GL
|
// tells GLM to force re-read of the texels back from GL
|
||||||
// i.e. "I know I stepped on those texels with a draw or blit - the GLM copy is stale"
|
// i.e. "I know I stepped on those texels with a draw or blit - the GLM copy is stale"
|
||||||
bool m_readback;
|
bool m_readback;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GLMTexLockDesc
|
struct GLMTexLockDesc
|
||||||
{
|
{
|
||||||
GLMTexLockParams m_req; // form of the lock request
|
GLMTexLockParams m_req; // form of the lock request
|
||||||
|
|
||||||
bool m_active; // set true at lock time. cleared at unlock time.
|
bool m_active; // set true at lock time. cleared at unlock time.
|
||||||
|
|
||||||
int m_sliceIndex; // which slice in the layout
|
int m_sliceIndex; // which slice in the layout
|
||||||
int m_sliceBaseOffset; // where is that in the texture data
|
int m_sliceBaseOffset; // where is that in the texture data
|
||||||
int m_sliceRegionOffset; // offset to the start (lowest address corner) of the region requested
|
int m_sliceRegionOffset; // offset to the start (lowest address corner) of the region requested
|
||||||
};
|
};
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
#define GLM_SAMPLER_COUNT 16
|
#define GLM_SAMPLER_COUNT 16
|
||||||
|
|
||||||
typedef CBitVec<GLM_SAMPLER_COUNT> CTexBindMask;
|
typedef CBitVec<GLM_SAMPLER_COUNT> CTexBindMask;
|
||||||
|
|
||||||
enum EGLMTexSliceFlag
|
enum EGLMTexSliceFlag
|
||||||
{
|
{
|
||||||
kSliceValid = 0x01, // slice has been teximage'd in whole at least once - set to 0 initially
|
kSliceValid = 0x01, // slice has been teximage'd in whole at least once - set to 0 initially
|
||||||
kSliceStorageValid = 0x02, // if backing store is available, this slice's data is a valid copy - set to 0 initially
|
kSliceStorageValid = 0x02, // if backing store is available, this slice's data is a valid copy - set to 0 initially
|
||||||
kSliceLocked = 0x04, // are one or more locks outstanding on this slice
|
kSliceLocked = 0x04, // are one or more locks outstanding on this slice
|
||||||
kSliceFullyDirty = 0x08, // does the slice need to be fully downloaded at unlock time (disregard dirty rects)
|
kSliceFullyDirty = 0x08, // does the slice need to be fully downloaded at unlock time (disregard dirty rects)
|
||||||
};
|
};
|
||||||
|
|
||||||
class CGLMTex
|
class CGLMTex
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
void Lock( GLMTexLockParams *params, char** addressOut, int* yStrideOut, int *zStrideOut );
|
void Lock( GLMTexLockParams *params, char** addressOut, int* yStrideOut, int *zStrideOut );
|
||||||
void Unlock( GLMTexLockParams *params );
|
void Unlock( GLMTexLockParams *params );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class GLMContext; // only GLMContext can make CGLMTex objects
|
friend class GLMContext; // only GLMContext can make CGLMTex objects
|
||||||
friend class GLMTester;
|
friend class GLMTester;
|
||||||
friend class CGLMFBO;
|
friend class CGLMFBO;
|
||||||
|
|
||||||
friend class IDirect3DDevice9;
|
friend class IDirect3DDevice9;
|
||||||
friend class IDirect3DBaseTexture9;
|
friend class IDirect3DBaseTexture9;
|
||||||
friend class IDirect3DTexture9;
|
friend class IDirect3DTexture9;
|
||||||
friend class IDirect3DSurface9;
|
friend class IDirect3DSurface9;
|
||||||
friend class IDirect3DCubeTexture9;
|
friend class IDirect3DCubeTexture9;
|
||||||
friend class IDirect3DVolumeTexture9;
|
friend class IDirect3DVolumeTexture9;
|
||||||
|
|
||||||
CGLMTex( GLMContext *ctx, GLMTexLayout *layout, GLMTexSamplingParams *sampling, char *debugLabel = NULL );
|
CGLMTex( GLMContext *ctx, GLMTexLayout *layout, GLMTexSamplingParams *sampling, char *debugLabel = NULL );
|
||||||
~CGLMTex( );
|
~CGLMTex( );
|
||||||
|
|
||||||
int CalcSliceIndex( int face, int mip );
|
int CalcSliceIndex( int face, int mip );
|
||||||
void CalcTexelDataOffsetAndStrides( int sliceIndex, int x, int y, int z, int *offsetOut, int *yStrideOut, int *zStrideOut );
|
void CalcTexelDataOffsetAndStrides( int sliceIndex, int x, int y, int z, int *offsetOut, int *yStrideOut, int *zStrideOut );
|
||||||
|
|
||||||
void ApplySamplingParams( GLMTexSamplingParams *params, bool noCheck=FALSE );
|
void ApplySamplingParams( GLMTexSamplingParams *params, bool noCheck=FALSE );
|
||||||
|
|
||||||
void ReadTexels( GLMTexLockDesc *desc, bool readWholeSlice=true );
|
void ReadTexels( GLMTexLockDesc *desc, bool readWholeSlice=true );
|
||||||
void WriteTexels( GLMTexLockDesc *desc, bool writeWholeSlice=true, bool noDataWrite=false );
|
void WriteTexels( GLMTexLockDesc *desc, bool writeWholeSlice=true, bool noDataWrite=false );
|
||||||
// last param lets us send NULL data ptr (only legal with uncompressed formats, beware)
|
// last param lets us send NULL data ptr (only legal with uncompressed formats, beware)
|
||||||
// this helps out ResetSRGB.
|
// this helps out ResetSRGB.
|
||||||
|
|
||||||
void ResetSRGB( bool srgb, bool noDataWrite );
|
void ResetSRGB( bool srgb, bool noDataWrite );
|
||||||
// re-specify texture format to match desired sRGB form
|
// re-specify texture format to match desired sRGB form
|
||||||
// noWrite means send NULL for texel source addresses instead of actual data - ideal for RT's
|
// noWrite means send NULL for texel source addresses instead of actual data - ideal for RT's
|
||||||
|
|
||||||
GLMTexLayout *m_layout; // layout of texture (shared across all tex with same layout)
|
GLMTexLayout *m_layout; // layout of texture (shared across all tex with same layout)
|
||||||
int m_minActiveMip;//index of lowest mip that has been written. used to drive setting of GL_TEXTURE_MAX_LEVEL.
|
int m_minActiveMip;//index of lowest mip that has been written. used to drive setting of GL_TEXTURE_MAX_LEVEL.
|
||||||
int m_maxActiveMip;//index of highest mip that has been written. used to drive setting of GL_TEXTURE_MAX_LEVEL.
|
int m_maxActiveMip;//index of highest mip that has been written. used to drive setting of GL_TEXTURE_MAX_LEVEL.
|
||||||
|
|
||||||
GLMTexSamplingParams m_sampling; // mirror of sampling params currently embodied in the texture
|
GLMTexSamplingParams m_sampling; // mirror of sampling params currently embodied in the texture
|
||||||
// (consult this at draw time, in order to know if changes need to be made)
|
// (consult this at draw time, in order to know if changes need to be made)
|
||||||
|
|
||||||
GLMContext *m_ctx; // link back to parent context
|
GLMContext *m_ctx; // link back to parent context
|
||||||
|
|
||||||
GLuint m_texName; // name of this texture in the context
|
GLuint m_texName; // name of this texture in the context
|
||||||
bool m_texClientStorage; // was CS selecetd for texture
|
bool m_texClientStorage; // was CS selecetd for texture
|
||||||
bool m_texPreloaded; // has it been kicked into VRAM with GLMContext::PreloadTex yet
|
bool m_texPreloaded; // has it been kicked into VRAM with GLMContext::PreloadTex yet
|
||||||
|
|
||||||
GLuint m_rboName; // name of MSAA RBO backing the tex if MSAA enabled (or zero)
|
GLuint m_rboName; // name of MSAA RBO backing the tex if MSAA enabled (or zero)
|
||||||
bool m_rboDirty; // has RBO been drawn on - i.e. needs to be blitted back to texture if texture is going to be sampled from
|
bool m_rboDirty; // has RBO been drawn on - i.e. needs to be blitted back to texture if texture is going to be sampled from
|
||||||
|
|
||||||
CTexBindMask m_bindPoints; // true for each place in the parent ctx where currently
|
CTexBindMask m_bindPoints; // true for each place in the parent ctx where currently
|
||||||
// bound (indexed via EGLMTexCtxBindingIndex)
|
// bound (indexed via EGLMTexCtxBindingIndex)
|
||||||
|
|
||||||
int m_rtAttachCount; // how many RT's have this texture attached somewhere
|
int m_rtAttachCount; // how many RT's have this texture attached somewhere
|
||||||
|
|
||||||
char *m_backing; // backing storage if available
|
char *m_backing; // backing storage if available
|
||||||
|
|
||||||
int m_lockCount; // lock reqs are stored in the GLMContext for tracking
|
int m_lockCount; // lock reqs are stored in the GLMContext for tracking
|
||||||
|
|
||||||
CUtlVector<unsigned char> m_sliceFlags;
|
CUtlVector<unsigned char> m_sliceFlags;
|
||||||
|
|
||||||
char *m_debugLabel; // strdup() of debugLabel passed in, or NULL
|
char *m_debugLabel; // strdup() of debugLabel passed in, or NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,184 +1,184 @@
|
|||||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
// !!! FIXME: Some of these aren't base OpenGL...pick out the extensions.
|
// !!! FIXME: Some of these aren't base OpenGL...pick out the extensions.
|
||||||
// !!! FIXME: Also, look up these -1, -1 versions numbers.
|
// !!! FIXME: Also, look up these -1, -1 versions numbers.
|
||||||
GL_FUNC(OpenGL,true,GLenum,glGetError,(void),())
|
GL_FUNC(OpenGL,true,GLenum,glGetError,(void),())
|
||||||
GL_FUNC_VOID(OpenGL,true,glActiveTexture,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glActiveTexture,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glAlphaFunc,(GLenum a,GLclampf b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glAlphaFunc,(GLenum a,GLclampf b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glAttachObjectARB,(GLhandleARB a,GLhandleARB b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glAttachObjectARB,(GLhandleARB a,GLhandleARB b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glBegin,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glBegin,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glBindAttribLocationARB,(GLhandleARB a,GLuint b,const GLcharARB *c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glBindAttribLocationARB,(GLhandleARB a,GLuint b,const GLcharARB *c),(a,b,c))
|
||||||
GL_FUNC_VOID(OpenGL,true,glBindBufferARB,(GLenum a,GLuint b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glBindBufferARB,(GLenum a,GLuint b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glBindProgramARB,(GLenum a,GLuint b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glBindProgramARB,(GLenum a,GLuint b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glBindTexture,(GLenum a,GLuint b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glBindTexture,(GLenum a,GLuint b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glBlendColor,(GLclampf a,GLclampf b,GLclampf c,GLclampf d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glBlendColor,(GLclampf a,GLclampf b,GLclampf c,GLclampf d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glBlendEquation,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glBlendEquation,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glBlendFunc,(GLenum a,GLenum b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glBlendFunc,(GLenum a,GLenum b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glBufferDataARB,(GLenum a,GLsizeiptrARB b,const GLvoid *c,GLenum d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glBufferDataARB,(GLenum a,GLsizeiptrARB b,const GLvoid *c,GLenum d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glClear,(GLbitfield a),(a))
|
GL_FUNC_VOID(OpenGL,true,glClear,(GLbitfield a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glClearColor,(GLclampf a,GLclampf b,GLclampf c,GLclampf d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glClearColor,(GLclampf a,GLclampf b,GLclampf c,GLclampf d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glClearDepth,(GLclampd a),(a))
|
GL_FUNC_VOID(OpenGL,true,glClearDepth,(GLclampd a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glClearStencil,(GLint a),(a))
|
GL_FUNC_VOID(OpenGL,true,glClearStencil,(GLint a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glClipPlane,(GLenum a,const GLdouble *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glClipPlane,(GLenum a,const GLdouble *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glColorMask,(GLboolean a,GLboolean b,GLboolean c,GLboolean d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glColorMask,(GLboolean a,GLboolean b,GLboolean c,GLboolean d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glCompileShaderARB,(GLhandleARB a),(a))
|
GL_FUNC_VOID(OpenGL,true,glCompileShaderARB,(GLhandleARB a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glCompressedTexImage2D,(GLenum a,GLint b,GLenum c,GLsizei d,GLsizei e,GLint f,GLsizei g,const GLvoid *h),(a,b,c,d,e,f,g,h))
|
GL_FUNC_VOID(OpenGL,true,glCompressedTexImage2D,(GLenum a,GLint b,GLenum c,GLsizei d,GLsizei e,GLint f,GLsizei g,const GLvoid *h),(a,b,c,d,e,f,g,h))
|
||||||
GL_FUNC_VOID(OpenGL,true,glCompressedTexImage3D,(GLenum a,GLint b,GLenum c,GLsizei d,GLsizei e,GLsizei f,GLint g,GLsizei h,const GLvoid *i),(a,b,c,d,e,f,g,h,i))
|
GL_FUNC_VOID(OpenGL,true,glCompressedTexImage3D,(GLenum a,GLint b,GLenum c,GLsizei d,GLsizei e,GLsizei f,GLint g,GLsizei h,const GLvoid *i),(a,b,c,d,e,f,g,h,i))
|
||||||
GL_FUNC(OpenGL,true,GLhandleARB,glCreateProgramObjectARB,(void),())
|
GL_FUNC(OpenGL,true,GLhandleARB,glCreateProgramObjectARB,(void),())
|
||||||
GL_FUNC(OpenGL,true,GLhandleARB,glCreateShaderObjectARB,(GLenum a),(a))
|
GL_FUNC(OpenGL,true,GLhandleARB,glCreateShaderObjectARB,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDeleteBuffersARB,(GLsizei a,const GLuint *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glDeleteBuffersARB,(GLsizei a,const GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDeleteObjectARB,(GLhandleARB a),(a))
|
GL_FUNC_VOID(OpenGL,true,glDeleteObjectARB,(GLhandleARB a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDeleteProgramsARB,(GLsizei a,const GLuint *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glDeleteProgramsARB,(GLsizei a,const GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDeleteQueriesARB,(GLsizei a,const GLuint *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glDeleteQueriesARB,(GLsizei a,const GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDeleteShader,(GLuint a),(a))
|
GL_FUNC_VOID(OpenGL,true,glDeleteShader,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDeleteTextures,(GLsizei a,const GLuint *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glDeleteTextures,(GLsizei a,const GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDepthFunc,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glDepthFunc,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDepthMask,(GLboolean a),(a))
|
GL_FUNC_VOID(OpenGL,true,glDepthMask,(GLboolean a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDepthRange,(GLclampd a,GLclampd b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glDepthRange,(GLclampd a,GLclampd b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDetachObjectARB,(GLhandleARB a,GLhandleARB b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glDetachObjectARB,(GLhandleARB a,GLhandleARB b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDisable,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glDisable,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDisableVertexAttribArray,(GLuint a),(a))
|
GL_FUNC_VOID(OpenGL,true,glDisableVertexAttribArray,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDrawArrays,(GLenum a,GLint b,GLsizei c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glDrawArrays,(GLenum a,GLint b,GLsizei c),(a,b,c))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDrawBuffer,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glDrawBuffer,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDrawRangeElements,(GLenum a,GLuint b,GLuint c,GLsizei d,GLenum e,const GLvoid *f),(a,b,c,d,e,f))
|
GL_FUNC_VOID(OpenGL,true,glDrawRangeElements,(GLenum a,GLuint b,GLuint c,GLsizei d,GLenum e,const GLvoid *f),(a,b,c,d,e,f))
|
||||||
GL_FUNC_VOID(OpenGL,true,glEnable,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glEnable,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glEnableVertexAttribArray,(GLuint a),(a))
|
GL_FUNC_VOID(OpenGL,true,glEnableVertexAttribArray,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glEnd,(void),())
|
GL_FUNC_VOID(OpenGL,true,glEnd,(void),())
|
||||||
GL_FUNC_VOID(OpenGL,true,glFinish,(void),())
|
GL_FUNC_VOID(OpenGL,true,glFinish,(void),())
|
||||||
GL_FUNC_VOID(OpenGL,true,glFlush,(void),())
|
GL_FUNC_VOID(OpenGL,true,glFlush,(void),())
|
||||||
GL_FUNC_VOID(OpenGL,true,glFrontFace,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glFrontFace,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGenBuffersARB,(GLsizei a,GLuint *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glGenBuffersARB,(GLsizei a,GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGenProgramsARB,(GLsizei a,GLuint *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glGenProgramsARB,(GLsizei a,GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGenQueriesARB,(GLsizei a,GLuint *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glGenQueriesARB,(GLsizei a,GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGenTextures,(GLsizei a,GLuint *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glGenTextures,(GLsizei a,GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGetBooleanv,(GLenum a,GLboolean *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glGetBooleanv,(GLenum a,GLboolean *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGetCompressedTexImage,(GLenum a,GLint b,GLvoid *c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glGetCompressedTexImage,(GLenum a,GLint b,GLvoid *c),(a,b,c))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGetDoublev,(GLenum a,GLdouble *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glGetDoublev,(GLenum a,GLdouble *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGetFloatv,(GLenum a,GLfloat *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glGetFloatv,(GLenum a,GLfloat *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGetInfoLogARB,(GLhandleARB a,GLsizei b,GLsizei *c,GLcharARB *d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glGetInfoLogARB,(GLhandleARB a,GLsizei b,GLsizei *c,GLcharARB *d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGetIntegerv,(GLenum a,GLint *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glGetIntegerv,(GLenum a,GLint *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGetObjectParameterivARB,(GLhandleARB a,GLenum b,GLint *c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glGetObjectParameterivARB,(GLhandleARB a,GLenum b,GLint *c),(a,b,c))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGetProgramivARB,(GLenum a,GLenum b,GLint *c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glGetProgramivARB,(GLenum a,GLenum b,GLint *c),(a,b,c))
|
||||||
GL_FUNC(OpenGL,true,const GLubyte *,glGetString,(GLenum a),(a))
|
GL_FUNC(OpenGL,true,const GLubyte *,glGetString,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGetTexImage,(GLenum a,GLint b,GLenum c,GLenum d,GLvoid *e),(a,b,c,d,e))
|
GL_FUNC_VOID(OpenGL,true,glGetTexImage,(GLenum a,GLint b,GLenum c,GLenum d,GLvoid *e),(a,b,c,d,e))
|
||||||
GL_FUNC(OpenGL,true,GLint,glGetUniformLocationARB,(GLhandleARB a,const GLcharARB *b),(a,b))
|
GL_FUNC(OpenGL,true,GLint,glGetUniformLocationARB,(GLhandleARB a,const GLcharARB *b),(a,b))
|
||||||
GL_FUNC(OpenGL,true,GLboolean,glIsEnabled,(GLenum a),(a))
|
GL_FUNC(OpenGL,true,GLboolean,glIsEnabled,(GLenum a),(a))
|
||||||
GL_FUNC(OpenGL,true,GLboolean,glIsTexture,(GLuint a),(a))
|
GL_FUNC(OpenGL,true,GLboolean,glIsTexture,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glLinkProgramARB,(GLhandleARB a),(a))
|
GL_FUNC_VOID(OpenGL,true,glLinkProgramARB,(GLhandleARB a),(a))
|
||||||
GL_FUNC(OpenGL,true,GLvoid*,glMapBufferARB,(GLenum a,GLenum b),(a,b))
|
GL_FUNC(OpenGL,true,GLvoid*,glMapBufferARB,(GLenum a,GLenum b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glOrtho,(GLdouble a,GLdouble b,GLdouble c,GLdouble d,GLdouble e,GLdouble f),(a,b,c,d,e,f))
|
GL_FUNC_VOID(OpenGL,true,glOrtho,(GLdouble a,GLdouble b,GLdouble c,GLdouble d,GLdouble e,GLdouble f),(a,b,c,d,e,f))
|
||||||
GL_FUNC_VOID(OpenGL,true,glPixelStorei,(GLenum a,GLint b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glPixelStorei,(GLenum a,GLint b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glPolygonMode,(GLenum a,GLenum b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glPolygonMode,(GLenum a,GLenum b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glPolygonOffset,(GLfloat a,GLfloat b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glPolygonOffset,(GLfloat a,GLfloat b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glPopAttrib,(void),())
|
GL_FUNC_VOID(OpenGL,true,glPopAttrib,(void),())
|
||||||
GL_FUNC_VOID(OpenGL,true,glProgramStringARB,(GLenum a,GLenum b,GLsizei c,const GLvoid *d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glProgramStringARB,(GLenum a,GLenum b,GLsizei c,const GLvoid *d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glPushAttrib,(GLbitfield a),(a))
|
GL_FUNC_VOID(OpenGL,true,glPushAttrib,(GLbitfield a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glReadBuffer,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glReadBuffer,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glScissor,(GLint a,GLint b,GLsizei c,GLsizei d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glScissor,(GLint a,GLint b,GLsizei c,GLsizei d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glShaderSourceARB,(GLhandleARB a,GLsizei b,const GLcharARB **c,const GLint *d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glShaderSourceARB,(GLhandleARB a,GLsizei b,const GLcharARB **c,const GLint *d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glStencilFunc,(GLenum a,GLint b,GLuint c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glStencilFunc,(GLenum a,GLint b,GLuint c),(a,b,c))
|
||||||
GL_FUNC_VOID(OpenGL,true,glStencilMask,(GLuint a),(a))
|
GL_FUNC_VOID(OpenGL,true,glStencilMask,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glStencilOp,(GLenum a,GLenum b,GLenum c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glStencilOp,(GLenum a,GLenum b,GLenum c),(a,b,c))
|
||||||
GL_FUNC_VOID(OpenGL,true,glTexCoord2f,(GLfloat a,GLfloat b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glTexCoord2f,(GLfloat a,GLfloat b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glTexImage2D,(GLenum a,GLint b,GLint c,GLsizei d,GLsizei e,GLint f,GLenum g,GLenum h,const GLvoid *i),(a,b,c,d,e,f,g,h,i))
|
GL_FUNC_VOID(OpenGL,true,glTexImage2D,(GLenum a,GLint b,GLint c,GLsizei d,GLsizei e,GLint f,GLenum g,GLenum h,const GLvoid *i),(a,b,c,d,e,f,g,h,i))
|
||||||
GL_FUNC_VOID(OpenGL,true,glTexImage3D,(GLenum a,GLint b,GLint c,GLsizei d,GLsizei e,GLsizei f,GLint g,GLenum h,GLenum i,const GLvoid *j),(a,b,c,d,e,f,g,h,i,j))
|
GL_FUNC_VOID(OpenGL,true,glTexImage3D,(GLenum a,GLint b,GLint c,GLsizei d,GLsizei e,GLsizei f,GLint g,GLenum h,GLenum i,const GLvoid *j),(a,b,c,d,e,f,g,h,i,j))
|
||||||
GL_FUNC_VOID(OpenGL,true,glTexParameterfv,(GLenum a,GLenum b,const GLfloat *c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glTexParameterfv,(GLenum a,GLenum b,const GLfloat *c),(a,b,c))
|
||||||
GL_FUNC_VOID(OpenGL,true,glTexParameteri,(GLenum a,GLenum b,GLint c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glTexParameteri,(GLenum a,GLenum b,GLint c),(a,b,c))
|
||||||
GL_FUNC_VOID(OpenGL,true,glTexSubImage2D,(GLenum a,GLint b,GLint c,GLint d,GLsizei e,GLsizei f,GLenum g,GLenum h,const GLvoid *i),(a,b,c,d,e,f,g,h,i))
|
GL_FUNC_VOID(OpenGL,true,glTexSubImage2D,(GLenum a,GLint b,GLint c,GLint d,GLsizei e,GLsizei f,GLenum g,GLenum h,const GLvoid *i),(a,b,c,d,e,f,g,h,i))
|
||||||
GL_FUNC_VOID(OpenGL,true,glUniform1f,(GLint a,GLfloat b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glUniform1f,(GLint a,GLfloat b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glUniform1i,(GLint a,GLint b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glUniform1i,(GLint a,GLint b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glUniform1iARB,(GLint a,GLint b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glUniform1iARB,(GLint a,GLint b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glUniform4fv,(GLint a,GLsizei b,const GLfloat *c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glUniform4fv,(GLint a,GLsizei b,const GLfloat *c),(a,b,c))
|
||||||
GL_FUNC(OpenGL,true,GLboolean,glUnmapBuffer,(GLenum a),(a))
|
GL_FUNC(OpenGL,true,GLboolean,glUnmapBuffer,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glUseProgram,(GLuint a),(a))
|
GL_FUNC_VOID(OpenGL,true,glUseProgram,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glVertex3f,(GLfloat a,GLfloat b,GLfloat c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glVertex3f,(GLfloat a,GLfloat b,GLfloat c),(a,b,c))
|
||||||
GL_FUNC_VOID(OpenGL,true,glVertexAttribPointer,(GLuint a,GLint b,GLenum c,GLboolean d,GLsizei e,const GLvoid *f),(a,b,c,d,e,f))
|
GL_FUNC_VOID(OpenGL,true,glVertexAttribPointer,(GLuint a,GLint b,GLenum c,GLboolean d,GLsizei e,const GLvoid *f),(a,b,c,d,e,f))
|
||||||
GL_FUNC_VOID(OpenGL,true,glViewport,(GLint a,GLint b,GLsizei c,GLsizei d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glViewport,(GLint a,GLint b,GLsizei c,GLsizei d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glEnableClientState,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glEnableClientState,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDisableClientState,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glDisableClientState,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glClientActiveTexture,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glClientActiveTexture,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glVertexPointer,(GLint a,GLenum b,GLsizei c,const GLvoid *d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glVertexPointer,(GLint a,GLenum b,GLsizei c,const GLvoid *d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glTexCoordPointer,(GLint a,GLenum b,GLsizei c,const GLvoid *d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glTexCoordPointer,(GLint a,GLenum b,GLsizei c,const GLvoid *d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glProgramEnvParameters4fvEXT,(GLenum a,GLuint b,GLsizei c,const GLfloat *d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glProgramEnvParameters4fvEXT,(GLenum a,GLuint b,GLsizei c,const GLfloat *d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glColor4sv,(const GLshort *a),(a))
|
GL_FUNC_VOID(OpenGL,true,glColor4sv,(const GLshort *a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glStencilOpSeparate,(GLenum a,GLenum b,GLenum c,GLenum d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glStencilOpSeparate,(GLenum a,GLenum b,GLenum c,GLenum d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glStencilFuncSeparate,(GLenum a,GLenum b,GLint c,GLuint d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glStencilFuncSeparate,(GLenum a,GLenum b,GLint c,GLuint d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGetTexLevelParameteriv,(GLenum a,GLint b,GLenum c,GLint *d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glGetTexLevelParameteriv,(GLenum a,GLint b,GLenum c,GLint *d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glColor4f,(GLfloat a,GLfloat b,GLfloat c,GLfloat d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glColor4f,(GLfloat a,GLfloat b,GLfloat c,GLfloat d),(a,b,c,d))
|
||||||
GL_EXT(GL_EXT_framebuffer_object,-1,-1)
|
GL_EXT(GL_EXT_framebuffer_object,-1,-1)
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glBindFramebufferEXT,(GLenum a,GLuint b),(a,b))
|
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glBindFramebufferEXT,(GLenum a,GLuint b),(a,b))
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glBindRenderbufferEXT,(GLenum a,GLuint b),(a,b))
|
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glBindRenderbufferEXT,(GLenum a,GLuint b),(a,b))
|
||||||
GL_FUNC(GL_EXT_framebuffer_object,false,GLenum,glCheckFramebufferStatusEXT,(GLenum a),(a))
|
GL_FUNC(GL_EXT_framebuffer_object,false,GLenum,glCheckFramebufferStatusEXT,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glDeleteRenderbuffersEXT,(GLsizei a,const GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glDeleteRenderbuffersEXT,(GLsizei a,const GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glFramebufferRenderbufferEXT,(GLenum a,GLenum b,GLenum c,GLuint d),(a,b,c,d))
|
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glFramebufferRenderbufferEXT,(GLenum a,GLenum b,GLenum c,GLuint d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glFramebufferTexture2DEXT,(GLenum a,GLenum b,GLenum c,GLuint d,GLint e),(a,b,c,d,e))
|
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glFramebufferTexture2DEXT,(GLenum a,GLenum b,GLenum c,GLuint d,GLint e),(a,b,c,d,e))
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glFramebufferTexture3DEXT,(GLenum a,GLenum b,GLenum c,GLuint d,GLint e,GLint f),(a,b,c,d,e,f))
|
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glFramebufferTexture3DEXT,(GLenum a,GLenum b,GLenum c,GLuint d,GLint e,GLint f),(a,b,c,d,e,f))
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glGenFramebuffersEXT,(GLsizei a,GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glGenFramebuffersEXT,(GLsizei a,GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glGenRenderbuffersEXT,(GLsizei a,GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glGenRenderbuffersEXT,(GLsizei a,GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glDeleteFramebuffersEXT,(GLsizei a,const GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glDeleteFramebuffersEXT,(GLsizei a,const GLuint *b),(a,b))
|
||||||
GL_EXT(GL_EXT_framebuffer_blit,-1,-1)
|
GL_EXT(GL_EXT_framebuffer_blit,-1,-1)
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_blit,false,glBlitFramebufferEXT,(GLint a,GLint b,GLint c,GLint d,GLint e,GLint f,GLint g,GLint h,GLbitfield i,GLenum j),(a,b,c,d,e,f,g,h,i,j))
|
GL_FUNC_VOID(GL_EXT_framebuffer_blit,false,glBlitFramebufferEXT,(GLint a,GLint b,GLint c,GLint d,GLint e,GLint f,GLint g,GLint h,GLbitfield i,GLenum j),(a,b,c,d,e,f,g,h,i,j))
|
||||||
GL_EXT(GL_EXT_framebuffer_multisample,-1,-1)
|
GL_EXT(GL_EXT_framebuffer_multisample,-1,-1)
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_multisample,false,glRenderbufferStorageMultisampleEXT,(GLenum a,GLsizei b,GLenum c,GLsizei d,GLsizei e),(a,b,c,d,e))
|
GL_FUNC_VOID(GL_EXT_framebuffer_multisample,false,glRenderbufferStorageMultisampleEXT,(GLenum a,GLsizei b,GLenum c,GLsizei d,GLsizei e),(a,b,c,d,e))
|
||||||
GL_EXT(GL_APPLE_fence,-1,-1)
|
GL_EXT(GL_APPLE_fence,-1,-1)
|
||||||
GL_FUNC(GL_APPLE_fence,false,GLboolean,glTestFenceAPPLE,(GLuint a),(a))
|
GL_FUNC(GL_APPLE_fence,false,GLboolean,glTestFenceAPPLE,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(GL_APPLE_fence,false,glSetFenceAPPLE,(GLuint a),(a))
|
GL_FUNC_VOID(GL_APPLE_fence,false,glSetFenceAPPLE,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(GL_APPLE_fence,false,glFinishFenceAPPLE,(GLuint a),(a))
|
GL_FUNC_VOID(GL_APPLE_fence,false,glFinishFenceAPPLE,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(GL_APPLE_fence,false,glDeleteFencesAPPLE,(GLsizei a,const GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_APPLE_fence,false,glDeleteFencesAPPLE,(GLsizei a,const GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(GL_APPLE_fence,false,glGenFencesAPPLE,(GLsizei a,GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_APPLE_fence,false,glGenFencesAPPLE,(GLsizei a,GLuint *b),(a,b))
|
||||||
GL_EXT(GL_NV_fence,-1,-1)
|
GL_EXT(GL_NV_fence,-1,-1)
|
||||||
GL_FUNC(GL_NV_fence,false,GLboolean,glTestFenceNV,(GLuint a),(a))
|
GL_FUNC(GL_NV_fence,false,GLboolean,glTestFenceNV,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(GL_NV_fence,false,glSetFenceNV,(GLuint a,GLenum b),(a,b))
|
GL_FUNC_VOID(GL_NV_fence,false,glSetFenceNV,(GLuint a,GLenum b),(a,b))
|
||||||
GL_FUNC_VOID(GL_NV_fence,false,glFinishFenceNV,(GLuint a),(a))
|
GL_FUNC_VOID(GL_NV_fence,false,glFinishFenceNV,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(GL_NV_fence,false,glDeleteFencesNV,(GLsizei a,const GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_NV_fence,false,glDeleteFencesNV,(GLsizei a,const GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(GL_NV_fence,false,glGenFencesNV,(GLsizei a,GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_NV_fence,false,glGenFencesNV,(GLsizei a,GLuint *b),(a,b))
|
||||||
GL_EXT(GL_ARB_sync,3,2)
|
GL_EXT(GL_ARB_sync,3,2)
|
||||||
#ifdef HAVE_GL_ARB_SYNC
|
#ifdef HAVE_GL_ARB_SYNC
|
||||||
GL_FUNC_VOID(GL_ARB_sync,false,glGetSynciv,(GLsync a, GLenum b, GLsizei c, GLsizei *d, GLint *e),(a,b,c,d,e))
|
GL_FUNC_VOID(GL_ARB_sync,false,glGetSynciv,(GLsync a, GLenum b, GLsizei c, GLsizei *d, GLint *e),(a,b,c,d,e))
|
||||||
GL_FUNC(GL_ARB_sync,false,GLenum,glClientWaitSync,(GLsync a, GLbitfield b, GLuint64 c),(a,b,c))
|
GL_FUNC(GL_ARB_sync,false,GLenum,glClientWaitSync,(GLsync a, GLbitfield b, GLuint64 c),(a,b,c))
|
||||||
GL_FUNC_VOID(GL_ARB_sync,false,glWaitSync,(GLsync a, GLbitfield b, GLuint64 c),(a,b,c))
|
GL_FUNC_VOID(GL_ARB_sync,false,glWaitSync,(GLsync a, GLbitfield b, GLuint64 c),(a,b,c))
|
||||||
GL_FUNC_VOID(GL_ARB_sync,false,glDeleteSync,(GLsync a),(a))
|
GL_FUNC_VOID(GL_ARB_sync,false,glDeleteSync,(GLsync a),(a))
|
||||||
GL_FUNC(GL_ARB_sync,false,GLsync,glFenceSync,(GLenum a, GLbitfield b),(a,b))
|
GL_FUNC(GL_ARB_sync,false,GLsync,glFenceSync,(GLenum a, GLbitfield b),(a,b))
|
||||||
#endif
|
#endif
|
||||||
GL_EXT(GL_EXT_draw_buffers2,-1,-1)
|
GL_EXT(GL_EXT_draw_buffers2,-1,-1)
|
||||||
GL_FUNC_VOID(GL_EXT_draw_buffers2,false,glColorMaskIndexedEXT,(GLuint a,GLboolean b,GLboolean c,GLboolean d,GLboolean e),(a,b,c,d,e))
|
GL_FUNC_VOID(GL_EXT_draw_buffers2,false,glColorMaskIndexedEXT,(GLuint a,GLboolean b,GLboolean c,GLboolean d,GLboolean e),(a,b,c,d,e))
|
||||||
GL_FUNC_VOID(GL_EXT_draw_buffers2,false,glEnableIndexedEXT,(GLenum a,GLuint b),(a,b))
|
GL_FUNC_VOID(GL_EXT_draw_buffers2,false,glEnableIndexedEXT,(GLenum a,GLuint b),(a,b))
|
||||||
GL_FUNC_VOID(GL_EXT_draw_buffers2,false,glDisableIndexedEXT,(GLenum a,GLuint b),(a,b))
|
GL_FUNC_VOID(GL_EXT_draw_buffers2,false,glDisableIndexedEXT,(GLenum a,GLuint b),(a,b))
|
||||||
GL_FUNC_VOID(GL_EXT_draw_buffers2,false,glGetBooleanIndexedvEXT,(GLenum a,GLuint b,GLboolean *c),(a,b,c))
|
GL_FUNC_VOID(GL_EXT_draw_buffers2,false,glGetBooleanIndexedvEXT,(GLenum a,GLuint b,GLboolean *c),(a,b,c))
|
||||||
GL_EXT(GL_EXT_bindable_uniform,-1,-1)
|
GL_EXT(GL_EXT_bindable_uniform,-1,-1)
|
||||||
GL_FUNC_VOID(GL_EXT_bindable_uniform,false,glUniformBufferEXT,(GLuint a,GLint b,GLuint c),(a,b,c))
|
GL_FUNC_VOID(GL_EXT_bindable_uniform,false,glUniformBufferEXT,(GLuint a,GLint b,GLuint c),(a,b,c))
|
||||||
GL_EXT(GL_APPLE_flush_buffer_range,-1,-1)
|
GL_EXT(GL_APPLE_flush_buffer_range,-1,-1)
|
||||||
GL_FUNC_VOID(GL_APPLE_flush_buffer_range,false,glBufferParameteriAPPLE,(GLenum a,GLenum b,GLint c),(a,b,c))
|
GL_FUNC_VOID(GL_APPLE_flush_buffer_range,false,glBufferParameteriAPPLE,(GLenum a,GLenum b,GLint c),(a,b,c))
|
||||||
GL_FUNC_VOID(GL_APPLE_flush_buffer_range,false,glFlushMappedBufferRangeAPPLE,(GLenum a,GLintptr b,GLsizeiptr c),(a,b,c))
|
GL_FUNC_VOID(GL_APPLE_flush_buffer_range,false,glFlushMappedBufferRangeAPPLE,(GLenum a,GLintptr b,GLsizeiptr c),(a,b,c))
|
||||||
GL_EXT(GL_ARB_map_buffer_range,-1,-1)
|
GL_EXT(GL_ARB_map_buffer_range,-1,-1)
|
||||||
GL_FUNC(GL_ARB_map_buffer_range,false,void*,glMapBufferRange,(GLenum a,GLintptr b,GLsizeiptr c,GLbitfield d),(a,b,c,d))
|
GL_FUNC(GL_ARB_map_buffer_range,false,void*,glMapBufferRange,(GLenum a,GLintptr b,GLsizeiptr c,GLbitfield d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(GL_ARB_map_buffer_range,false,glFlushMappedBufferRange,(GLenum a,GLintptr b,GLsizeiptr c),(a,b,c))
|
GL_FUNC_VOID(GL_ARB_map_buffer_range,false,glFlushMappedBufferRange,(GLenum a,GLintptr b,GLsizeiptr c),(a,b,c))
|
||||||
GL_EXT(GL_ARB_occlusion_query,-1,-1)
|
GL_EXT(GL_ARB_occlusion_query,-1,-1)
|
||||||
GL_FUNC_VOID(GL_ARB_occlusion_query,false,glBeginQueryARB,(GLenum a,GLuint b),(a,b))
|
GL_FUNC_VOID(GL_ARB_occlusion_query,false,glBeginQueryARB,(GLenum a,GLuint b),(a,b))
|
||||||
GL_FUNC_VOID(GL_ARB_occlusion_query,false,glEndQueryARB,(GLenum a),(a))
|
GL_FUNC_VOID(GL_ARB_occlusion_query,false,glEndQueryARB,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(GL_ARB_occlusion_query,false,glGetQueryObjectivARB,(GLuint a,GLenum b,GLint *c),(a,b,c))
|
GL_FUNC_VOID(GL_ARB_occlusion_query,false,glGetQueryObjectivARB,(GLuint a,GLenum b,GLint *c),(a,b,c))
|
||||||
GL_FUNC_VOID(GL_ARB_occlusion_query,false,glGetQueryObjectuivARB,(GLuint a,GLenum b,GLuint *c),(a,b,c))
|
GL_FUNC_VOID(GL_ARB_occlusion_query,false,glGetQueryObjectuivARB,(GLuint a,GLenum b,GLuint *c),(a,b,c))
|
||||||
GL_EXT(GL_APPLE_texture_range,-1,-1)
|
GL_EXT(GL_APPLE_texture_range,-1,-1)
|
||||||
GL_FUNC_VOID(GL_APPLE_texture_range,false,glTextureRangeAPPLE,(GLenum a,GLsizei b,void *c),(a,b,c))
|
GL_FUNC_VOID(GL_APPLE_texture_range,false,glTextureRangeAPPLE,(GLenum a,GLsizei b,void *c),(a,b,c))
|
||||||
GL_FUNC_VOID(GL_APPLE_texture_range,false,glGetTexParameterPointervAPPLE,(GLenum a,GLenum b,void* *c),(a,b,c))
|
GL_FUNC_VOID(GL_APPLE_texture_range,false,glGetTexParameterPointervAPPLE,(GLenum a,GLenum b,void* *c),(a,b,c))
|
||||||
GL_EXT(GL_APPLE_client_storage,-1,-1)
|
GL_EXT(GL_APPLE_client_storage,-1,-1)
|
||||||
GL_EXT(GL_ARB_uniform_buffer,-1,-1)
|
GL_EXT(GL_ARB_uniform_buffer,-1,-1)
|
||||||
GL_EXT(GL_ARB_vertex_array_bgra,-1,-1)
|
GL_EXT(GL_ARB_vertex_array_bgra,-1,-1)
|
||||||
GL_EXT(GL_EXT_vertex_array_bgra,-1,-1)
|
GL_EXT(GL_EXT_vertex_array_bgra,-1,-1)
|
||||||
GL_EXT(GL_ARB_framebuffer_object,3,0)
|
GL_EXT(GL_ARB_framebuffer_object,3,0)
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glBindFramebuffer,(GLenum a,GLuint b),(a,b))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glBindFramebuffer,(GLenum a,GLuint b),(a,b))
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glBindRenderbuffer,(GLenum a,GLuint b),(a,b))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glBindRenderbuffer,(GLenum a,GLuint b),(a,b))
|
||||||
GL_FUNC(GL_ARB_framebuffer_object,false,GLenum,glCheckFramebufferStatus,(GLenum a),(a))
|
GL_FUNC(GL_ARB_framebuffer_object,false,GLenum,glCheckFramebufferStatus,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glDeleteRenderbuffers,(GLsizei a,const GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glDeleteRenderbuffers,(GLsizei a,const GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glFramebufferRenderbuffer,(GLenum a,GLenum b,GLenum c,GLuint d),(a,b,c,d))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glFramebufferRenderbuffer,(GLenum a,GLenum b,GLenum c,GLuint d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glFramebufferTexture2D,(GLenum a,GLenum b,GLenum c,GLuint d,GLint e),(a,b,c,d,e))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glFramebufferTexture2D,(GLenum a,GLenum b,GLenum c,GLuint d,GLint e),(a,b,c,d,e))
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glFramebufferTexture3D,(GLenum a,GLenum b,GLenum c,GLuint d,GLint e,GLint f),(a,b,c,d,e,f))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glFramebufferTexture3D,(GLenum a,GLenum b,GLenum c,GLuint d,GLint e,GLint f),(a,b,c,d,e,f))
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glGenFramebuffers,(GLsizei a,GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glGenFramebuffers,(GLsizei a,GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glGenRenderbuffers,(GLsizei a,GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glGenRenderbuffers,(GLsizei a,GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glDeleteFramebuffers,(GLsizei a,const GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glDeleteFramebuffers,(GLsizei a,const GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glBlitFramebuffer,(GLint a,GLint b,GLint c,GLint d,GLint e,GLint f,GLint g,GLint h,GLbitfield i,GLenum j),(a,b,c,d,e,f,g,h,i,j))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glBlitFramebuffer,(GLint a,GLint b,GLint c,GLint d,GLint e,GLint f,GLint g,GLint h,GLbitfield i,GLenum j),(a,b,c,d,e,f,g,h,i,j))
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glRenderbufferStorageMultisample,(GLenum a,GLsizei b,GLenum c,GLsizei d,GLsizei e),(a,b,c,d,e))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glRenderbufferStorageMultisample,(GLenum a,GLsizei b,GLenum c,GLsizei d,GLsizei e),(a,b,c,d,e))
|
||||||
GL_EXT(GL_GREMEDY_string_marker,-1,-1)
|
GL_EXT(GL_GREMEDY_string_marker,-1,-1)
|
||||||
GL_FUNC_VOID(GL_GREMEDY_string_marker,false,glStringMarkerGREMEDY,(GLsizei a,const void *b),(a,b))
|
GL_FUNC_VOID(GL_GREMEDY_string_marker,false,glStringMarkerGREMEDY,(GLsizei a,const void *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glPushClientAttrib,(GLbitfield a),(a))
|
GL_FUNC_VOID(OpenGL,true,glPushClientAttrib,(GLbitfield a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glPopClientAttrib,(void),())
|
GL_FUNC_VOID(OpenGL,true,glPopClientAttrib,(void),())
|
||||||
|
|
||||||
|
@ -1,177 +1,177 @@
|
|||||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
//
|
//
|
||||||
// glmdisplay.h
|
// glmdisplay.h
|
||||||
// display related stuff - used by both GLMgr and the CocoaMgr
|
// display related stuff - used by both GLMgr and the CocoaMgr
|
||||||
//
|
//
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
#ifndef GLMDISPLAY_H
|
#ifndef GLMDISPLAY_H
|
||||||
#define GLMDISPLAY_H
|
#define GLMDISPLAY_H
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifdef OSX
|
#ifdef OSX
|
||||||
#include <OpenGL/OpenGL.h>
|
#include <OpenGL/OpenGL.h>
|
||||||
#include <OpenGL/gl.h>
|
#include <OpenGL/gl.h>
|
||||||
#include <OpenGL/glext.h>
|
#include <OpenGL/glext.h>
|
||||||
#include <OpenGL/CGLTypes.h>
|
#include <OpenGL/CGLTypes.h>
|
||||||
#include <OpenGL/CGLRenderers.h>
|
#include <OpenGL/CGLRenderers.h>
|
||||||
#include <OpenGL/CGLCurrent.h>
|
#include <OpenGL/CGLCurrent.h>
|
||||||
|
|
||||||
typedef uint32_t CGDirectDisplayID;
|
typedef uint32_t CGDirectDisplayID;
|
||||||
typedef uint32_t CGOpenGLDisplayMask;
|
typedef uint32_t CGOpenGLDisplayMask;
|
||||||
typedef double CGRefreshRate;
|
typedef double CGRefreshRate;
|
||||||
|
|
||||||
//#include <ApplicationServices/ApplicationServices.h>
|
//#include <ApplicationServices/ApplicationServices.h>
|
||||||
#elif defined(LINUX)
|
#elif defined(LINUX)
|
||||||
#include "tier0/platform.h"
|
#include "tier0/platform.h"
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
#include <GL/glext.h>
|
#include <GL/glext.h>
|
||||||
#else
|
#else
|
||||||
#error
|
#error
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef void _PseudoNSGLContext; // aka NSOpenGLContext
|
typedef void _PseudoNSGLContext; // aka NSOpenGLContext
|
||||||
typedef _PseudoNSGLContext *PseudoNSGLContextPtr;
|
typedef _PseudoNSGLContext *PseudoNSGLContextPtr;
|
||||||
|
|
||||||
struct GLMDisplayModeInfoFields
|
struct GLMDisplayModeInfoFields
|
||||||
{
|
{
|
||||||
uint m_modePixelWidth;
|
uint m_modePixelWidth;
|
||||||
uint m_modePixelHeight;
|
uint m_modePixelHeight;
|
||||||
uint m_modeRefreshHz;
|
uint m_modeRefreshHz;
|
||||||
// are we even going to talk about bit depth... not yet
|
// are we even going to talk about bit depth... not yet
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GLMDisplayInfoFields
|
struct GLMDisplayInfoFields
|
||||||
{
|
{
|
||||||
#ifdef OSX
|
#ifdef OSX
|
||||||
CGDirectDisplayID m_cgDisplayID;
|
CGDirectDisplayID m_cgDisplayID;
|
||||||
CGOpenGLDisplayMask m_glDisplayMask; // result of CGDisplayIDToOpenGLDisplayMask on the cg_displayID.
|
CGOpenGLDisplayMask m_glDisplayMask; // result of CGDisplayIDToOpenGLDisplayMask on the cg_displayID.
|
||||||
#endif
|
#endif
|
||||||
uint m_displayPixelWidth;
|
uint m_displayPixelWidth;
|
||||||
uint m_displayPixelHeight;
|
uint m_displayPixelHeight;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GLMRendererInfoFields
|
struct GLMRendererInfoFields
|
||||||
{
|
{
|
||||||
/*properties of interest and their desired values.
|
/*properties of interest and their desired values.
|
||||||
|
|
||||||
kCGLRPFullScreen = 54, true
|
kCGLRPFullScreen = 54, true
|
||||||
kCGLRPAccelerated = 73, true
|
kCGLRPAccelerated = 73, true
|
||||||
kCGLRPWindow = 80, true
|
kCGLRPWindow = 80, true
|
||||||
|
|
||||||
kCGLRPRendererID = 70, informational
|
kCGLRPRendererID = 70, informational
|
||||||
kCGLRPDisplayMask = 84, informational
|
kCGLRPDisplayMask = 84, informational
|
||||||
kCGLRPBufferModes = 100, informational
|
kCGLRPBufferModes = 100, informational
|
||||||
kCGLRPColorModes = 103, informational
|
kCGLRPColorModes = 103, informational
|
||||||
kCGLRPAccumModes = 104, informational
|
kCGLRPAccumModes = 104, informational
|
||||||
kCGLRPDepthModes = 105, informational
|
kCGLRPDepthModes = 105, informational
|
||||||
kCGLRPStencilModes = 106, informational
|
kCGLRPStencilModes = 106, informational
|
||||||
kCGLRPMaxAuxBuffers = 107, informational
|
kCGLRPMaxAuxBuffers = 107, informational
|
||||||
kCGLRPMaxSampleBuffers = 108, informational
|
kCGLRPMaxSampleBuffers = 108, informational
|
||||||
kCGLRPMaxSamples = 109, informational
|
kCGLRPMaxSamples = 109, informational
|
||||||
kCGLRPSampleModes = 110, informational
|
kCGLRPSampleModes = 110, informational
|
||||||
kCGLRPSampleAlpha = 111, informational
|
kCGLRPSampleAlpha = 111, informational
|
||||||
kCGLRPVideoMemory = 120, informational
|
kCGLRPVideoMemory = 120, informational
|
||||||
kCGLRPTextureMemory = 121, informational
|
kCGLRPTextureMemory = 121, informational
|
||||||
kCGLRPRendererCount = 128 number of renderers in the CGLRendererInfoObj under examination
|
kCGLRPRendererCount = 128 number of renderers in the CGLRendererInfoObj under examination
|
||||||
|
|
||||||
kCGLRPOffScreen = 53, D/C
|
kCGLRPOffScreen = 53, D/C
|
||||||
kCGLRPRobust = 75, FALSE or D/C - aka we're asking for no-fallback
|
kCGLRPRobust = 75, FALSE or D/C - aka we're asking for no-fallback
|
||||||
kCGLRPBackingStore = 76, D/C
|
kCGLRPBackingStore = 76, D/C
|
||||||
kCGLRPMPSafe = 78, D/C
|
kCGLRPMPSafe = 78, D/C
|
||||||
kCGLRPMultiScreen = 81, D/C
|
kCGLRPMultiScreen = 81, D/C
|
||||||
kCGLRPCompliant = 83, D/C
|
kCGLRPCompliant = 83, D/C
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
//--------------------------- info we have from CGL renderer queries, IOKit, Gestalt
|
//--------------------------- info we have from CGL renderer queries, IOKit, Gestalt
|
||||||
//--------------------------- these are set up in the displayDB by CocoaMgr
|
//--------------------------- these are set up in the displayDB by CocoaMgr
|
||||||
GLint m_fullscreen;
|
GLint m_fullscreen;
|
||||||
GLint m_accelerated;
|
GLint m_accelerated;
|
||||||
GLint m_windowed;
|
GLint m_windowed;
|
||||||
|
|
||||||
GLint m_rendererID;
|
GLint m_rendererID;
|
||||||
GLint m_displayMask;
|
GLint m_displayMask;
|
||||||
GLint m_bufferModes;
|
GLint m_bufferModes;
|
||||||
GLint m_colorModes;
|
GLint m_colorModes;
|
||||||
GLint m_accumModes;
|
GLint m_accumModes;
|
||||||
GLint m_depthModes;
|
GLint m_depthModes;
|
||||||
GLint m_stencilModes;
|
GLint m_stencilModes;
|
||||||
|
|
||||||
GLint m_maxAuxBuffers;
|
GLint m_maxAuxBuffers;
|
||||||
GLint m_maxSampleBuffers;
|
GLint m_maxSampleBuffers;
|
||||||
GLint m_maxSamples;
|
GLint m_maxSamples;
|
||||||
GLint m_sampleModes;
|
GLint m_sampleModes;
|
||||||
GLint m_sampleAlpha;
|
GLint m_sampleAlpha;
|
||||||
|
|
||||||
GLint m_vidMemory;
|
GLint m_vidMemory;
|
||||||
GLint m_texMemory;
|
GLint m_texMemory;
|
||||||
|
|
||||||
uint m_pciVendorID;
|
uint m_pciVendorID;
|
||||||
uint m_pciDeviceID;
|
uint m_pciDeviceID;
|
||||||
char m_pciModelString[64];
|
char m_pciModelString[64];
|
||||||
char m_driverInfoString[64];
|
char m_driverInfoString[64];
|
||||||
|
|
||||||
//--------------------------- OS version related - set up by CocoaMgr
|
//--------------------------- OS version related - set up by CocoaMgr
|
||||||
|
|
||||||
// OS version found
|
// OS version found
|
||||||
uint m_osComboVersion; // 0x00XXYYZZ : XX major, YY minor, ZZ minor minor : 10.6.3 --> 0x000A0603. 10.5.8 --> 0x000A0508.
|
uint m_osComboVersion; // 0x00XXYYZZ : XX major, YY minor, ZZ minor minor : 10.6.3 --> 0x000A0603. 10.5.8 --> 0x000A0508.
|
||||||
|
|
||||||
//--------------------------- shorthands - also set up by CocoaMgr - driven by vendorid / deviceid
|
//--------------------------- shorthands - also set up by CocoaMgr - driven by vendorid / deviceid
|
||||||
|
|
||||||
bool m_ati;
|
bool m_ati;
|
||||||
bool m_atiR5xx;
|
bool m_atiR5xx;
|
||||||
bool m_atiR6xx;
|
bool m_atiR6xx;
|
||||||
bool m_atiR7xx;
|
bool m_atiR7xx;
|
||||||
bool m_atiR8xx;
|
bool m_atiR8xx;
|
||||||
bool m_atiNewer;
|
bool m_atiNewer;
|
||||||
|
|
||||||
bool m_intel;
|
bool m_intel;
|
||||||
bool m_intel95x;
|
bool m_intel95x;
|
||||||
bool m_intel3100;
|
bool m_intel3100;
|
||||||
bool m_intelNewer;
|
bool m_intelNewer;
|
||||||
|
|
||||||
bool m_nv;
|
bool m_nv;
|
||||||
bool m_nvG7x;
|
bool m_nvG7x;
|
||||||
bool m_nvG8x;
|
bool m_nvG8x;
|
||||||
bool m_nvNewer;
|
bool m_nvNewer;
|
||||||
|
|
||||||
//--------------------------- context query results - left blank in the display DB - but valid in a GLMContext (call ctx->Caps() to get a const ref)
|
//--------------------------- context query results - left blank in the display DB - but valid in a GLMContext (call ctx->Caps() to get a const ref)
|
||||||
|
|
||||||
// booleans
|
// booleans
|
||||||
bool m_hasGammaWrites; // aka glGetBooleanv(GL_FRAMEBUFFER_SRGB_CAPABLE_EXT) / glEnable(GL_FRAMEBUFFER_SRGB_EXT)
|
bool m_hasGammaWrites; // aka glGetBooleanv(GL_FRAMEBUFFER_SRGB_CAPABLE_EXT) / glEnable(GL_FRAMEBUFFER_SRGB_EXT)
|
||||||
bool m_hasMixedAttachmentSizes; // aka ARB_fbo in 10.6.3 - test for min OS vers, then exported ext string
|
bool m_hasMixedAttachmentSizes; // aka ARB_fbo in 10.6.3 - test for min OS vers, then exported ext string
|
||||||
bool m_hasBGRA; // aka GL_BGRA vertex attribs in 10.6.3 - - test for min OS vers, then exported ext string
|
bool m_hasBGRA; // aka GL_BGRA vertex attribs in 10.6.3 - - test for min OS vers, then exported ext string
|
||||||
bool m_hasNewFullscreenMode; // aka 10.6.x "big window" fullscreen mode
|
bool m_hasNewFullscreenMode; // aka 10.6.x "big window" fullscreen mode
|
||||||
bool m_hasNativeClipVertexMode; // aka GLSL gl_ClipVertex does not fall back to SW- OS version and folklore-based
|
bool m_hasNativeClipVertexMode; // aka GLSL gl_ClipVertex does not fall back to SW- OS version and folklore-based
|
||||||
bool m_hasOcclusionQuery; // occlusion query: do you speak it ?!
|
bool m_hasOcclusionQuery; // occlusion query: do you speak it ?!
|
||||||
bool m_hasFramebufferBlit; // framebuffer blit: know what I'm sayin?!
|
bool m_hasFramebufferBlit; // framebuffer blit: know what I'm sayin?!
|
||||||
bool m_hasPerfPackage1; // means new MTGL, fast OQ, fast uniform upload, NV can resolve flipped (late summer 2010 post 10.6.4 update)
|
bool m_hasPerfPackage1; // means new MTGL, fast OQ, fast uniform upload, NV can resolve flipped (late summer 2010 post 10.6.4 update)
|
||||||
|
|
||||||
// counts
|
// counts
|
||||||
int m_maxAniso; // aniso limit - context query
|
int m_maxAniso; // aniso limit - context query
|
||||||
|
|
||||||
// other exts
|
// other exts
|
||||||
bool m_hasBindableUniforms;
|
bool m_hasBindableUniforms;
|
||||||
bool m_hasUniformBuffers;
|
bool m_hasUniformBuffers;
|
||||||
|
|
||||||
// runtime options that aren't negotiable once set
|
// runtime options that aren't negotiable once set
|
||||||
bool m_hasDualShaders; // must supply CLI arg "-glmdualshaders" or we go GLSL only
|
bool m_hasDualShaders; // must supply CLI arg "-glmdualshaders" or we go GLSL only
|
||||||
|
|
||||||
//--------------------------- " can'ts " - specific problems that need to be worked around
|
//--------------------------- " can'ts " - specific problems that need to be worked around
|
||||||
|
|
||||||
bool m_cantBlitReliably; // Intel chipsets have problems blitting sRGB sometimes
|
bool m_cantBlitReliably; // Intel chipsets have problems blitting sRGB sometimes
|
||||||
bool m_cantAttachSRGB; // NV G8x on 10.5.8 can't have srgb tex on FBO color - separate issue from hasGammaWrites
|
bool m_cantAttachSRGB; // NV G8x on 10.5.8 can't have srgb tex on FBO color - separate issue from hasGammaWrites
|
||||||
bool m_cantResolveFlipped; // happens on NV in 10.6.4 and prior - console variable "gl_can_resolve_flipped" can overrule
|
bool m_cantResolveFlipped; // happens on NV in 10.6.4 and prior - console variable "gl_can_resolve_flipped" can overrule
|
||||||
bool m_cantResolveScaled; // happens everywhere per GL spec but may be relaxed some day - console variable "gl_can_resolve_scaled" can overrule
|
bool m_cantResolveScaled; // happens everywhere per GL spec but may be relaxed some day - console variable "gl_can_resolve_scaled" can overrule
|
||||||
bool m_costlyGammaFlips; // this means that sRGB sampling state affects shader code gen, resulting in state-dependent code regen
|
bool m_costlyGammaFlips; // this means that sRGB sampling state affects shader code gen, resulting in state-dependent code regen
|
||||||
|
|
||||||
|
|
||||||
//--------------------------- " bads " - known bad drivers
|
//--------------------------- " bads " - known bad drivers
|
||||||
bool m_badDriver1064NV; // this is the bad NVIDIA driver on 10.6.4 - stutter, tex corruption, black screen issues
|
bool m_badDriver1064NV; // this is the bad NVIDIA driver on 10.6.4 - stutter, tex corruption, black screen issues
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,299 +1,299 @@
|
|||||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
//
|
//
|
||||||
// glmgrbasics.h
|
// glmgrbasics.h
|
||||||
// types, common headers, forward declarations, utilities
|
// types, common headers, forward declarations, utilities
|
||||||
//
|
//
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
#ifndef GLMBASICS_H
|
#ifndef GLMBASICS_H
|
||||||
#define GLMBASICS_H
|
#define GLMBASICS_H
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifdef OSX
|
#ifdef OSX
|
||||||
#include <OpenGL/OpenGL.h>
|
#include <OpenGL/OpenGL.h>
|
||||||
#include <OpenGL/gl.h>
|
#include <OpenGL/gl.h>
|
||||||
#include <OpenGL/glext.h>
|
#include <OpenGL/glext.h>
|
||||||
#include <OpenGL/CGLTypes.h>
|
#include <OpenGL/CGLTypes.h>
|
||||||
#include <OpenGL/CGLRenderers.h>
|
#include <OpenGL/CGLRenderers.h>
|
||||||
#include <OpenGL/CGLCurrent.h>
|
#include <OpenGL/CGLCurrent.h>
|
||||||
#include <OpenGL/CGLProfiler.h>
|
#include <OpenGL/CGLProfiler.h>
|
||||||
//#include <ApplicationServices/ApplicationServices.h>
|
//#include <ApplicationServices/ApplicationServices.h>
|
||||||
#elif defined(LINUX)
|
#elif defined(LINUX)
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
#include <GL/glext.h>
|
#include <GL/glext.h>
|
||||||
#else
|
#else
|
||||||
#error
|
#error
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "tier0/platform.h"
|
#include "tier0/platform.h"
|
||||||
|
|
||||||
#include "bitmap/imageformat.h"
|
#include "bitmap/imageformat.h"
|
||||||
#include "bitvec.h"
|
#include "bitvec.h"
|
||||||
#include "tier1/checksum_md5.h"
|
#include "tier1/checksum_md5.h"
|
||||||
#include "tier1/utlvector.h"
|
#include "tier1/utlvector.h"
|
||||||
#include "tier1/convar.h"
|
#include "tier1/convar.h"
|
||||||
|
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#include "dxabstract_types.h"
|
#include "dxabstract_types.h"
|
||||||
|
|
||||||
// types
|
// types
|
||||||
struct GLMRect;
|
struct GLMRect;
|
||||||
typedef void *PseudoGLContextPtr;
|
typedef void *PseudoGLContextPtr;
|
||||||
|
|
||||||
|
|
||||||
// 3-d integer box (used for texture lock/unlock etc)
|
// 3-d integer box (used for texture lock/unlock etc)
|
||||||
struct GLMRegion
|
struct GLMRegion
|
||||||
{
|
{
|
||||||
int xmin,xmax;
|
int xmin,xmax;
|
||||||
int ymin,ymax;
|
int ymin,ymax;
|
||||||
int zmin,zmax;
|
int zmin,zmax;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GLMRect // follows GL convention - if coming from the D3D rect you will need to fiddle the Y's
|
struct GLMRect // follows GL convention - if coming from the D3D rect you will need to fiddle the Y's
|
||||||
{
|
{
|
||||||
int xmin; // left
|
int xmin; // left
|
||||||
int ymin; // bottom
|
int ymin; // bottom
|
||||||
int xmax; // right
|
int xmax; // right
|
||||||
int ymax; // top
|
int ymax; // top
|
||||||
};
|
};
|
||||||
|
|
||||||
// macros
|
// macros
|
||||||
|
|
||||||
//#define GLMassert(x) assert(x)
|
//#define GLMassert(x) assert(x)
|
||||||
|
|
||||||
// forward decls
|
// forward decls
|
||||||
class GLMgr; // singleton
|
class GLMgr; // singleton
|
||||||
class GLMContext; // GL context
|
class GLMContext; // GL context
|
||||||
class CGLMContextTester; // testing class
|
class CGLMContextTester; // testing class
|
||||||
class CGLMTex;
|
class CGLMTex;
|
||||||
class CGLMFBO;
|
class CGLMFBO;
|
||||||
class CGLMProgram;
|
class CGLMProgram;
|
||||||
class CGLMBuffer;
|
class CGLMBuffer;
|
||||||
|
|
||||||
|
|
||||||
// utilities
|
// utilities
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
// D3D codes
|
// D3D codes
|
||||||
eD3D_DEVTYPE,
|
eD3D_DEVTYPE,
|
||||||
eD3D_FORMAT,
|
eD3D_FORMAT,
|
||||||
eD3D_RTYPE,
|
eD3D_RTYPE,
|
||||||
eD3D_USAGE,
|
eD3D_USAGE,
|
||||||
eD3D_RSTATE, // render state
|
eD3D_RSTATE, // render state
|
||||||
eD3D_SIO, // D3D shader bytecode
|
eD3D_SIO, // D3D shader bytecode
|
||||||
eD3D_VTXDECLUSAGE,
|
eD3D_VTXDECLUSAGE,
|
||||||
|
|
||||||
// CGL codes
|
// CGL codes
|
||||||
eCGL_RENDID,
|
eCGL_RENDID,
|
||||||
|
|
||||||
// OpenGL error codes
|
// OpenGL error codes
|
||||||
eGL_ERROR,
|
eGL_ERROR,
|
||||||
|
|
||||||
// OpenGL enums
|
// OpenGL enums
|
||||||
eGL_ENUM,
|
eGL_ENUM,
|
||||||
eGL_RENDERER
|
eGL_RENDERER
|
||||||
|
|
||||||
} GLMThing_t;
|
} GLMThing_t;
|
||||||
|
|
||||||
const char* GLMDecode( GLMThing_t type, unsigned long value ); // decode a numeric const
|
const char* GLMDecode( GLMThing_t type, unsigned long value ); // decode a numeric const
|
||||||
const char* GLMDecodeMask( GLMThing_t type, unsigned long value ); // decode a bitmask
|
const char* GLMDecodeMask( GLMThing_t type, unsigned long value ); // decode a bitmask
|
||||||
|
|
||||||
void GLMStop( void ); // aka Debugger()
|
void GLMStop( void ); // aka Debugger()
|
||||||
void GLMCheckError( bool noStop = false, bool noLog= false );
|
void GLMCheckError( bool noStop = false, bool noLog= false );
|
||||||
void GLMEnableTrace( bool on );
|
void GLMEnableTrace( bool on );
|
||||||
|
|
||||||
// expose these in release now
|
// expose these in release now
|
||||||
// Mimic PIX events so we can decorate debug spew
|
// Mimic PIX events so we can decorate debug spew
|
||||||
void GLMBeginPIXEvent( const char *str );
|
void GLMBeginPIXEvent( const char *str );
|
||||||
void GLMEndPIXEvent( void );
|
void GLMEndPIXEvent( void );
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
// knob twiddling
|
// knob twiddling
|
||||||
float GLMKnob( char *knobname, float *setvalue ); // Pass NULL to not-set the knob value
|
float GLMKnob( char *knobname, float *setvalue ); // Pass NULL to not-set the knob value
|
||||||
float GLMKnobToggle( char *knobname );
|
float GLMKnobToggle( char *knobname );
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
// other stuff
|
// other stuff
|
||||||
|
|
||||||
// helpers for CGLSetOption - no op if no profiler
|
// helpers for CGLSetOption - no op if no profiler
|
||||||
void GLMProfilerClearTrace( void );
|
void GLMProfilerClearTrace( void );
|
||||||
void GLMProfilerEnableTrace( bool enable );
|
void GLMProfilerEnableTrace( bool enable );
|
||||||
|
|
||||||
// helpers for CGLSetParameter - no op if no profiler
|
// helpers for CGLSetParameter - no op if no profiler
|
||||||
void GLMProfilerDumpState( void );
|
void GLMProfilerDumpState( void );
|
||||||
|
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
// classes
|
// classes
|
||||||
|
|
||||||
// helper class making function tracking easier to wire up
|
// helper class making function tracking easier to wire up
|
||||||
#if GLMDEBUG
|
#if GLMDEBUG
|
||||||
class GLMFuncLogger
|
class GLMFuncLogger
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// simple function log
|
// simple function log
|
||||||
GLMFuncLogger( const char *funcName )
|
GLMFuncLogger( const char *funcName )
|
||||||
{
|
{
|
||||||
m_funcName = funcName;
|
m_funcName = funcName;
|
||||||
m_earlyOut = false;
|
m_earlyOut = false;
|
||||||
|
|
||||||
GLMPrintf( ">%s", m_funcName );
|
GLMPrintf( ">%s", m_funcName );
|
||||||
};
|
};
|
||||||
|
|
||||||
// more advanced version lets you pass args (i.e. called parameters or anything else of interest)
|
// more advanced version lets you pass args (i.e. called parameters or anything else of interest)
|
||||||
// no macro for this one, since no easy way to pass through the args as well as the funcname
|
// no macro for this one, since no easy way to pass through the args as well as the funcname
|
||||||
GLMFuncLogger( const char *funcName, char *fmt, ... )
|
GLMFuncLogger( const char *funcName, char *fmt, ... )
|
||||||
{
|
{
|
||||||
m_funcName = funcName;
|
m_funcName = funcName;
|
||||||
m_earlyOut = false;
|
m_earlyOut = false;
|
||||||
|
|
||||||
// this acts like GLMPrintf here
|
// this acts like GLMPrintf here
|
||||||
// all the indent policy is down in GLMPrintfVA
|
// all the indent policy is down in GLMPrintfVA
|
||||||
// which means we need to inject a ">" at the front of the format string to make this work... sigh.
|
// which means we need to inject a ">" at the front of the format string to make this work... sigh.
|
||||||
|
|
||||||
char modifiedFmt[2000];
|
char modifiedFmt[2000];
|
||||||
modifiedFmt[0] = '>';
|
modifiedFmt[0] = '>';
|
||||||
strcpy( modifiedFmt+1, fmt );
|
strcpy( modifiedFmt+1, fmt );
|
||||||
|
|
||||||
va_list vargs;
|
va_list vargs;
|
||||||
va_start(vargs, fmt);
|
va_start(vargs, fmt);
|
||||||
GLMPrintfVA( modifiedFmt, vargs );
|
GLMPrintfVA( modifiedFmt, vargs );
|
||||||
va_end( vargs );
|
va_end( vargs );
|
||||||
}
|
}
|
||||||
|
|
||||||
~GLMFuncLogger( )
|
~GLMFuncLogger( )
|
||||||
{
|
{
|
||||||
if (m_earlyOut)
|
if (m_earlyOut)
|
||||||
{
|
{
|
||||||
GLMPrintf( "<%s (early out)", m_funcName );
|
GLMPrintf( "<%s (early out)", m_funcName );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GLMPrintf( "<%s", m_funcName );
|
GLMPrintf( "<%s", m_funcName );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void EarlyOut( void )
|
void EarlyOut( void )
|
||||||
{
|
{
|
||||||
m_earlyOut = true;
|
m_earlyOut = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *m_funcName; // set at construction time
|
const char *m_funcName; // set at construction time
|
||||||
bool m_earlyOut;
|
bool m_earlyOut;
|
||||||
};
|
};
|
||||||
|
|
||||||
// handy macro to go with the function tracking class
|
// handy macro to go with the function tracking class
|
||||||
#define GLM_FUNC GLMFuncLogger _logger_ ( __FUNCTION__ )
|
#define GLM_FUNC GLMFuncLogger _logger_ ( __FUNCTION__ )
|
||||||
#else
|
#else
|
||||||
#define GLM_FUNC
|
#define GLM_FUNC
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// class to keep an in-memory mirror of a file which may be getting edited during run
|
// class to keep an in-memory mirror of a file which may be getting edited during run
|
||||||
class CGLMFileMirror
|
class CGLMFileMirror
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CGLMFileMirror( char *fullpath ); // just associates mirror with file. if file exists it will be read.
|
CGLMFileMirror( char *fullpath ); // just associates mirror with file. if file exists it will be read.
|
||||||
//if non existent it will be created with size zero
|
//if non existent it will be created with size zero
|
||||||
~CGLMFileMirror( );
|
~CGLMFileMirror( );
|
||||||
|
|
||||||
bool HasData( void ); // see if data avail
|
bool HasData( void ); // see if data avail
|
||||||
void GetData( char **dataPtr, uint *dataSizePtr ); // read it out
|
void GetData( char **dataPtr, uint *dataSizePtr ); // read it out
|
||||||
void SetData( char *data, uint dataSize ); // put data in (and write it to disk)
|
void SetData( char *data, uint dataSize ); // put data in (and write it to disk)
|
||||||
bool PollForChanges( void ); // check disk copy. If different, read it back in and return true.
|
bool PollForChanges( void ); // check disk copy. If different, read it back in and return true.
|
||||||
|
|
||||||
void UpdateStatInfo( void ); // make sure stat info is current for our file
|
void UpdateStatInfo( void ); // make sure stat info is current for our file
|
||||||
void ReadFile( void );
|
void ReadFile( void );
|
||||||
void WriteFile( void );
|
void WriteFile( void );
|
||||||
|
|
||||||
void OpenInEditor( bool foreground=false ); // pass TRUE if you would like the editor to pop to foreground
|
void OpenInEditor( bool foreground=false ); // pass TRUE if you would like the editor to pop to foreground
|
||||||
|
|
||||||
/// how about a "wait for change" method..
|
/// how about a "wait for change" method..
|
||||||
|
|
||||||
char *m_path; // fullpath to file
|
char *m_path; // fullpath to file
|
||||||
bool m_exists;
|
bool m_exists;
|
||||||
struct stat m_stat; // stat results for the file (last time checked)
|
struct stat m_stat; // stat results for the file (last time checked)
|
||||||
|
|
||||||
char *m_data; // content of file
|
char *m_data; // content of file
|
||||||
uint m_size; // length of content
|
uint m_size; // length of content
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// class based on the file mirror, that makes it easy to edit them outside the app.
|
// class based on the file mirror, that makes it easy to edit them outside the app.
|
||||||
|
|
||||||
// it receives an initial block of text from the engine, and hashes it. ("orig")
|
// it receives an initial block of text from the engine, and hashes it. ("orig")
|
||||||
// it munges it by duplicating all the text after the "!!" line, and appending it in commented form. ("munged")
|
// it munges it by duplicating all the text after the "!!" line, and appending it in commented form. ("munged")
|
||||||
// a mirror file is activated, using a filename based on the hash from the orig text.
|
// a mirror file is activated, using a filename based on the hash from the orig text.
|
||||||
// if there is already content on disk matching that filename, use that content *unless* the 'blitz' parameter is set.
|
// if there is already content on disk matching that filename, use that content *unless* the 'blitz' parameter is set.
|
||||||
// (i.e. engine is instructing this subsystem to wipe out any old/modified variants of the text)
|
// (i.e. engine is instructing this subsystem to wipe out any old/modified variants of the text)
|
||||||
|
|
||||||
|
|
||||||
class CGLMEditableTextItem
|
class CGLMEditableTextItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CGLMEditableTextItem( char *text, uint size, bool forceOverwrite, char *prefix, char *suffix = NULL ); // create a text blob from text source, optional filename suffix
|
CGLMEditableTextItem( char *text, uint size, bool forceOverwrite, char *prefix, char *suffix = NULL ); // create a text blob from text source, optional filename suffix
|
||||||
~CGLMEditableTextItem( );
|
~CGLMEditableTextItem( );
|
||||||
|
|
||||||
bool HasData( void );
|
bool HasData( void );
|
||||||
bool PollForChanges( void ); // return true if stale i.e. you need to get a new edition
|
bool PollForChanges( void ); // return true if stale i.e. you need to get a new edition
|
||||||
void GetCurrentText( char **textOut, uint *sizeOut ); // query for read access to the active blob (could be the original, could be external edited copy)
|
void GetCurrentText( char **textOut, uint *sizeOut ); // query for read access to the active blob (could be the original, could be external edited copy)
|
||||||
void OpenInEditor( bool foreground=false ); // call user attention to this text
|
void OpenInEditor( bool foreground=false ); // call user attention to this text
|
||||||
|
|
||||||
// internal methods
|
// internal methods
|
||||||
void GenHashOfOrigText( void );
|
void GenHashOfOrigText( void );
|
||||||
void GenBaseNameAndFullPath( char *prefix, char *suffix );
|
void GenBaseNameAndFullPath( char *prefix, char *suffix );
|
||||||
void GenMungedText( bool fromMirror );
|
void GenMungedText( bool fromMirror );
|
||||||
|
|
||||||
// members
|
// members
|
||||||
// orig
|
// orig
|
||||||
uint m_origSize;
|
uint m_origSize;
|
||||||
char *m_origText; // what was submitted
|
char *m_origText; // what was submitted
|
||||||
unsigned char m_origDigest[MD5_DIGEST_LENGTH]; // digest of what was submitted
|
unsigned char m_origDigest[MD5_DIGEST_LENGTH]; // digest of what was submitted
|
||||||
|
|
||||||
// munged
|
// munged
|
||||||
uint m_mungedSize;
|
uint m_mungedSize;
|
||||||
char *m_mungedText; // re-processed edition, initial content submission to the file mirror
|
char *m_mungedText; // re-processed edition, initial content submission to the file mirror
|
||||||
|
|
||||||
// mirror
|
// mirror
|
||||||
char *m_mirrorBaseName; // generated from the hash of the orig text, plus the label / prefix
|
char *m_mirrorBaseName; // generated from the hash of the orig text, plus the label / prefix
|
||||||
char *m_mirrorFullPath; // base name
|
char *m_mirrorFullPath; // base name
|
||||||
CGLMFileMirror *m_mirror; // file mirror itself. holds "official" copy for GetCurrentText to return.
|
CGLMFileMirror *m_mirror; // file mirror itself. holds "official" copy for GetCurrentText to return.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// debug font
|
// debug font
|
||||||
extern unsigned char g_glmDebugFontMap[16384];
|
extern unsigned char g_glmDebugFontMap[16384];
|
||||||
|
|
||||||
// class for cracking multi-part text blobs
|
// class for cracking multi-part text blobs
|
||||||
// sections are demarcated by beginning-of-line markers submitted in a table by the caller
|
// sections are demarcated by beginning-of-line markers submitted in a table by the caller
|
||||||
|
|
||||||
struct GLMTextSection
|
struct GLMTextSection
|
||||||
{
|
{
|
||||||
int m_markerIndex; // based on table of markers passed in to constructor
|
int m_markerIndex; // based on table of markers passed in to constructor
|
||||||
uint m_textOffset; // where is the text - offset
|
uint m_textOffset; // where is the text - offset
|
||||||
int m_textLength; // how big is the section
|
int m_textLength; // how big is the section
|
||||||
};
|
};
|
||||||
|
|
||||||
class CGLMTextSectioner
|
class CGLMTextSectioner
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CGLMTextSectioner( char *text, int textSize, char **markers ); // constructor finds all the sections
|
CGLMTextSectioner( char *text, int textSize, char **markers ); // constructor finds all the sections
|
||||||
~CGLMTextSectioner( );
|
~CGLMTextSectioner( );
|
||||||
|
|
||||||
int Count( void ); // how many sections found
|
int Count( void ); // how many sections found
|
||||||
void GetSection( int index, uint *offsetOut, uint *lengthOut, int *markerIndexOut );
|
void GetSection( int index, uint *offsetOut, uint *lengthOut, int *markerIndexOut );
|
||||||
// find section, size, what marker
|
// find section, size, what marker
|
||||||
// note that more than one section can be marked similarly.
|
// note that more than one section can be marked similarly.
|
||||||
// so policy isn't made here, you walk the sections and decide what to do if there are dupes.
|
// so policy isn't made here, you walk the sections and decide what to do if there are dupes.
|
||||||
|
|
||||||
//members
|
//members
|
||||||
|
|
||||||
//section table
|
//section table
|
||||||
CUtlVector< GLMTextSection > m_sectionTable;
|
CUtlVector< GLMTextSection > m_sectionTable;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,93 +1,93 @@
|
|||||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
//
|
//
|
||||||
// glmgrext.h
|
// glmgrext.h
|
||||||
// helper file for extension testing and runtime importing of entry points
|
// helper file for extension testing and runtime importing of entry points
|
||||||
//
|
//
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifdef OSX
|
#ifdef OSX
|
||||||
#include <OpenGL/gl.h>
|
#include <OpenGL/gl.h>
|
||||||
#include <OpenGL/glext.h>
|
#include <OpenGL/glext.h>
|
||||||
#elif defined(LINUX)
|
#elif defined(LINUX)
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
#include <GL/glext.h>
|
#include <GL/glext.h>
|
||||||
#else
|
#else
|
||||||
#error
|
#error
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GL_EXT_framebuffer_sRGB
|
#ifndef GL_EXT_framebuffer_sRGB
|
||||||
#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9
|
#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9
|
||||||
#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA
|
#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ARB_texture_rg
|
#ifndef ARB_texture_rg
|
||||||
#define GL_COMPRESSED_RED 0x8225
|
#define GL_COMPRESSED_RED 0x8225
|
||||||
#define GL_COMPRESSED_RG 0x8226
|
#define GL_COMPRESSED_RG 0x8226
|
||||||
#define GL_RG 0x8227
|
#define GL_RG 0x8227
|
||||||
#define GL_RG_INTEGER 0x8228
|
#define GL_RG_INTEGER 0x8228
|
||||||
#define GL_R8 0x8229
|
#define GL_R8 0x8229
|
||||||
#define GL_R16 0x822A
|
#define GL_R16 0x822A
|
||||||
#define GL_RG8 0x822B
|
#define GL_RG8 0x822B
|
||||||
#define GL_RG16 0x822C
|
#define GL_RG16 0x822C
|
||||||
#define GL_R16F 0x822D
|
#define GL_R16F 0x822D
|
||||||
#define GL_R32F 0x822E
|
#define GL_R32F 0x822E
|
||||||
#define GL_RG16F 0x822F
|
#define GL_RG16F 0x822F
|
||||||
#define GL_RG32F 0x8230
|
#define GL_RG32F 0x8230
|
||||||
#define GL_R8I 0x8231
|
#define GL_R8I 0x8231
|
||||||
#define GL_R8UI 0x8232
|
#define GL_R8UI 0x8232
|
||||||
#define GL_R16I 0x8233
|
#define GL_R16I 0x8233
|
||||||
#define GL_R16UI 0x8234
|
#define GL_R16UI 0x8234
|
||||||
#define GL_R32I 0x8235
|
#define GL_R32I 0x8235
|
||||||
#define GL_R32UI 0x8236
|
#define GL_R32UI 0x8236
|
||||||
#define GL_RG8I 0x8237
|
#define GL_RG8I 0x8237
|
||||||
#define GL_RG8UI 0x8238
|
#define GL_RG8UI 0x8238
|
||||||
#define GL_RG16I 0x8239
|
#define GL_RG16I 0x8239
|
||||||
#define GL_RG16UI 0x823A
|
#define GL_RG16UI 0x823A
|
||||||
#define GL_RG32I 0x823B
|
#define GL_RG32I 0x823B
|
||||||
#define GL_RG32UI 0x823C
|
#define GL_RG32UI 0x823C
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GL_EXT_bindable_uniform
|
#ifndef GL_EXT_bindable_uniform
|
||||||
#define GL_UNIFORM_BUFFER_EXT 0x8DEE
|
#define GL_UNIFORM_BUFFER_EXT 0x8DEE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// unpublished extension enums (thus the "X")
|
// unpublished extension enums (thus the "X")
|
||||||
|
|
||||||
// from EXT_framebuffer_multisample_blit_scaled..
|
// from EXT_framebuffer_multisample_blit_scaled..
|
||||||
#define XGL_SCALED_RESOLVE_FASTEST_EXT 0x90BA
|
#define XGL_SCALED_RESOLVE_FASTEST_EXT 0x90BA
|
||||||
#define XGL_SCALED_RESOLVE_NICEST_EXT 0x90BB
|
#define XGL_SCALED_RESOLVE_NICEST_EXT 0x90BB
|
||||||
|
|
||||||
#ifndef GL_TEXTURE_MINIMIZE_STORAGE_APPLE
|
#ifndef GL_TEXTURE_MINIMIZE_STORAGE_APPLE
|
||||||
#define GL_TEXTURE_MINIMIZE_STORAGE_APPLE 0x85B6
|
#define GL_TEXTURE_MINIMIZE_STORAGE_APPLE 0x85B6
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GL_ALL_COMPLETED_NV
|
#ifndef GL_ALL_COMPLETED_NV
|
||||||
#define GL_ALL_COMPLETED_NV 0x84F2
|
#define GL_ALL_COMPLETED_NV 0x84F2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GL_MAP_READ_BIT
|
#ifndef GL_MAP_READ_BIT
|
||||||
#define GL_MAP_READ_BIT 0x0001
|
#define GL_MAP_READ_BIT 0x0001
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GL_MAP_WRITE_BIT
|
#ifndef GL_MAP_WRITE_BIT
|
||||||
#define GL_MAP_WRITE_BIT 0x0002
|
#define GL_MAP_WRITE_BIT 0x0002
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GL_MAP_INVALIDATE_RANGE_BIT
|
#ifndef GL_MAP_INVALIDATE_RANGE_BIT
|
||||||
#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
|
#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GL_MAP_INVALIDATE_BUFFER_BIT
|
#ifndef GL_MAP_INVALIDATE_BUFFER_BIT
|
||||||
#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
|
#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GL_MAP_FLUSH_EXPLICIT_BIT
|
#ifndef GL_MAP_FLUSH_EXPLICIT_BIT
|
||||||
#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
|
#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GL_MAP_UNSYNCHRONIZED_BIT
|
#ifndef GL_MAP_UNSYNCHRONIZED_BIT
|
||||||
#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
|
#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1,112 +1,112 @@
|
|||||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
/******************************************************************/
|
/******************************************************************/
|
||||||
/* qsort.c -- Non-Recursive ANSI Quicksort function */
|
/* qsort.c -- Non-Recursive ANSI Quicksort function */
|
||||||
/* */
|
/* */
|
||||||
/* Public domain by Raymond Gardner, Englewood CO February 1991 */
|
/* Public domain by Raymond Gardner, Englewood CO February 1991 */
|
||||||
/* */
|
/* */
|
||||||
/* Usage: */
|
/* Usage: */
|
||||||
/* qsort(base, nbr_elements, width_bytes, compare_function); */
|
/* qsort(base, nbr_elements, width_bytes, compare_function); */
|
||||||
/* void *base; */
|
/* void *base; */
|
||||||
/* size_t nbr_elements, width_bytes; */
|
/* size_t nbr_elements, width_bytes; */
|
||||||
/* int (*compare_function)(const void *, const void *); */
|
/* int (*compare_function)(const void *, const void *); */
|
||||||
/* */
|
/* */
|
||||||
/* Sorts an array starting at base, of length nbr_elements, each */
|
/* Sorts an array starting at base, of length nbr_elements, each */
|
||||||
/* element of size width_bytes, ordered via compare_function, */
|
/* element of size width_bytes, ordered via compare_function, */
|
||||||
/* which is called as (*compare_function)(ptr_to_element1, */
|
/* which is called as (*compare_function)(ptr_to_element1, */
|
||||||
/* ptr_to_element2) and returns < 0 if element1 < element2, */
|
/* ptr_to_element2) and returns < 0 if element1 < element2, */
|
||||||
/* 0 if element1 = element2, > 0 if element1 > element2. */
|
/* 0 if element1 = element2, > 0 if element1 > element2. */
|
||||||
/* Most refinements are due to R. Sedgewick. See "Implementing */
|
/* Most refinements are due to R. Sedgewick. See "Implementing */
|
||||||
/* Quicksort Programs", Comm. ACM, Oct. 1978, and Corrigendum, */
|
/* Quicksort Programs", Comm. ACM, Oct. 1978, and Corrigendum, */
|
||||||
/* Comm. ACM, June 1979. */
|
/* Comm. ACM, June 1979. */
|
||||||
/******************************************************************/
|
/******************************************************************/
|
||||||
|
|
||||||
// modified to take (and use) a context object, ala Microsoft's qsort_s
|
// modified to take (and use) a context object, ala Microsoft's qsort_s
|
||||||
// "extension" to the stdlib
|
// "extension" to the stdlib
|
||||||
|
|
||||||
#include <stddef.h> /* for size_t definition */
|
#include <stddef.h> /* for size_t definition */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** swap nbytes between a and b
|
** swap nbytes between a and b
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void swap_bytes(char *a, char *b, size_t nbytes)
|
static void swap_bytes(char *a, char *b, size_t nbytes)
|
||||||
{
|
{
|
||||||
char tmp;
|
char tmp;
|
||||||
do {
|
do {
|
||||||
tmp = *a; *a++ = *b; *b++ = tmp;
|
tmp = *a; *a++ = *b; *b++ = tmp;
|
||||||
} while ( --nbytes );
|
} while ( --nbytes );
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SWAP(a, b) (swap_bytes((char *)(a), (char *)(b), size))
|
#define SWAP(a, b) (swap_bytes((char *)(a), (char *)(b), size))
|
||||||
|
|
||||||
#define COMP(ctx, a, b) ((*comp)((void *)ctx, (void *)(a), (void *)(b)))
|
#define COMP(ctx, a, b) ((*comp)((void *)ctx, (void *)(a), (void *)(b)))
|
||||||
|
|
||||||
#define T 7 /* subfiles of T or fewer elements will */
|
#define T 7 /* subfiles of T or fewer elements will */
|
||||||
/* be sorted by a simple insertion sort */
|
/* be sorted by a simple insertion sort */
|
||||||
/* Note! T must be at least 3 */
|
/* Note! T must be at least 3 */
|
||||||
|
|
||||||
extern "C" void qsort_s(void *basep, size_t nelems, size_t size,
|
extern "C" void qsort_s(void *basep, size_t nelems, size_t size,
|
||||||
int (*comp)(void *, const void *, const void *),
|
int (*comp)(void *, const void *, const void *),
|
||||||
void *ctx)
|
void *ctx)
|
||||||
{
|
{
|
||||||
char *stack[40], **sp; /* stack and stack pointer */
|
char *stack[40], **sp; /* stack and stack pointer */
|
||||||
char *i, *j, *limit; /* scan and limit pointers */
|
char *i, *j, *limit; /* scan and limit pointers */
|
||||||
size_t thresh; /* size of T elements in bytes */
|
size_t thresh; /* size of T elements in bytes */
|
||||||
char *base; /* base pointer as char * */
|
char *base; /* base pointer as char * */
|
||||||
|
|
||||||
base = (char *)basep; /* set up char * base pointer */
|
base = (char *)basep; /* set up char * base pointer */
|
||||||
thresh = T * size; /* init threshold */
|
thresh = T * size; /* init threshold */
|
||||||
sp = stack; /* init stack pointer */
|
sp = stack; /* init stack pointer */
|
||||||
limit = base + nelems * size;/* pointer past end of array */
|
limit = base + nelems * size;/* pointer past end of array */
|
||||||
for ( ;; ) { /* repeat until break... */
|
for ( ;; ) { /* repeat until break... */
|
||||||
if ( limit - base > thresh ) { /* if more than T elements */
|
if ( limit - base > thresh ) { /* if more than T elements */
|
||||||
/* swap base with middle */
|
/* swap base with middle */
|
||||||
SWAP((((limit-base)/size)/2)*size+base, base);
|
SWAP((((limit-base)/size)/2)*size+base, base);
|
||||||
i = base + size; /* i scans left to right */
|
i = base + size; /* i scans left to right */
|
||||||
j = limit - size; /* j scans right to left */
|
j = limit - size; /* j scans right to left */
|
||||||
if ( COMP(ctx, i, j) > 0 ) /* Sedgewick's */
|
if ( COMP(ctx, i, j) > 0 ) /* Sedgewick's */
|
||||||
SWAP(i, j); /* three-element sort */
|
SWAP(i, j); /* three-element sort */
|
||||||
if ( COMP(ctx, base, j) > 0 )/* sets things up */
|
if ( COMP(ctx, base, j) > 0 )/* sets things up */
|
||||||
SWAP(base, j); /* so that */
|
SWAP(base, j); /* so that */
|
||||||
if ( COMP(ctx, i, base) > 0 )/* *i <= *base <= *j */
|
if ( COMP(ctx, i, base) > 0 )/* *i <= *base <= *j */
|
||||||
SWAP(i, base); /* *base is pivot element */
|
SWAP(i, base); /* *base is pivot element */
|
||||||
for ( ;; ) { /* loop until break */
|
for ( ;; ) { /* loop until break */
|
||||||
do /* move i right */
|
do /* move i right */
|
||||||
i += size; /* until *i >= pivot */
|
i += size; /* until *i >= pivot */
|
||||||
while ( COMP(ctx, i, base) < 0 );
|
while ( COMP(ctx, i, base) < 0 );
|
||||||
do /* move j left */
|
do /* move j left */
|
||||||
j -= size; /* until *j <= pivot */
|
j -= size; /* until *j <= pivot */
|
||||||
while ( COMP(ctx, j, base) > 0 );
|
while ( COMP(ctx, j, base) > 0 );
|
||||||
if ( i > j ) /* if pointers crossed */
|
if ( i > j ) /* if pointers crossed */
|
||||||
break; /* break loop */
|
break; /* break loop */
|
||||||
SWAP(i, j); /* else swap elements, keep scanning*/
|
SWAP(i, j); /* else swap elements, keep scanning*/
|
||||||
}
|
}
|
||||||
SWAP(base, j); /* move pivot into correct place */
|
SWAP(base, j); /* move pivot into correct place */
|
||||||
if ( j - base > limit - i ) { /* if left subfile larger */
|
if ( j - base > limit - i ) { /* if left subfile larger */
|
||||||
sp[0] = base; /* stack left subfile base */
|
sp[0] = base; /* stack left subfile base */
|
||||||
sp[1] = j; /* and limit */
|
sp[1] = j; /* and limit */
|
||||||
base = i; /* sort the right subfile */
|
base = i; /* sort the right subfile */
|
||||||
} else { /* else right subfile larger*/
|
} else { /* else right subfile larger*/
|
||||||
sp[0] = i; /* stack right subfile base */
|
sp[0] = i; /* stack right subfile base */
|
||||||
sp[1] = limit; /* and limit */
|
sp[1] = limit; /* and limit */
|
||||||
limit = j; /* sort the left subfile */
|
limit = j; /* sort the left subfile */
|
||||||
}
|
}
|
||||||
sp += 2; /* increment stack pointer */
|
sp += 2; /* increment stack pointer */
|
||||||
} else { /* else subfile is small, use insertion sort */
|
} else { /* else subfile is small, use insertion sort */
|
||||||
for ( j = base, i = j+size; i < limit; j = i, i += size )
|
for ( j = base, i = j+size; i < limit; j = i, i += size )
|
||||||
for ( ; COMP(ctx, j, j+size) > 0; j -= size ) {
|
for ( ; COMP(ctx, j, j+size) > 0; j -= size ) {
|
||||||
SWAP(j, j+size);
|
SWAP(j, j+size);
|
||||||
if ( j == base )
|
if ( j == base )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ( sp != stack ) { /* if any entries on stack */
|
if ( sp != stack ) { /* if any entries on stack */
|
||||||
sp -= 2; /* pop the base and limit */
|
sp -= 2; /* pop the base and limit */
|
||||||
base = sp[0];
|
base = sp[0];
|
||||||
limit = sp[1];
|
limit = sp[1];
|
||||||
} else /* else stack empty, done */
|
} else /* else stack empty, done */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,99 +1,99 @@
|
|||||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
//
|
//
|
||||||
// cglmprogram.h
|
// cglmprogram.h
|
||||||
// GLMgr buffers (index / vertex)
|
// GLMgr buffers (index / vertex)
|
||||||
// ... maybe add PBO later as well
|
// ... maybe add PBO later as well
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
#ifndef CGLMBUFFER_H
|
#ifndef CGLMBUFFER_H
|
||||||
#define CGLMBUFFER_H
|
#define CGLMBUFFER_H
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// ext links
|
// ext links
|
||||||
|
|
||||||
// http://www.opengl.org/registry/specs/ARB/vertex_buffer_object.txt
|
// http://www.opengl.org/registry/specs/ARB/vertex_buffer_object.txt
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// tokens not in the SDK headers
|
// tokens not in the SDK headers
|
||||||
|
|
||||||
//#ifndef GL_DEPTH_STENCIL_ATTACHMENT_EXT
|
//#ifndef GL_DEPTH_STENCIL_ATTACHMENT_EXT
|
||||||
// #define GL_DEPTH_STENCIL_ATTACHMENT_EXT 0x84F9
|
// #define GL_DEPTH_STENCIL_ATTACHMENT_EXT 0x84F9
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// forward declarations
|
// forward declarations
|
||||||
|
|
||||||
class GLMContext;
|
class GLMContext;
|
||||||
|
|
||||||
enum EGLMBufferType
|
enum EGLMBufferType
|
||||||
{
|
{
|
||||||
kGLMVertexBuffer,
|
kGLMVertexBuffer,
|
||||||
kGLMIndexBuffer,
|
kGLMIndexBuffer,
|
||||||
kGLMUniformBuffer, // for bindable uniform
|
kGLMUniformBuffer, // for bindable uniform
|
||||||
kGLMPixelBuffer, // for PBO
|
kGLMPixelBuffer, // for PBO
|
||||||
|
|
||||||
kGLMNumBufferTypes
|
kGLMNumBufferTypes
|
||||||
};
|
};
|
||||||
|
|
||||||
// pass this in "options" to constructor to make a dynamic buffer
|
// pass this in "options" to constructor to make a dynamic buffer
|
||||||
#define GLMBufferOptionDynamic 0x00000001
|
#define GLMBufferOptionDynamic 0x00000001
|
||||||
|
|
||||||
struct GLMBuffLockParams
|
struct GLMBuffLockParams
|
||||||
{
|
{
|
||||||
uint m_offset;
|
uint m_offset;
|
||||||
uint m_size;
|
uint m_size;
|
||||||
bool m_nonblocking;
|
bool m_nonblocking;
|
||||||
bool m_discard;
|
bool m_discard;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CGLMBuffer
|
class CGLMBuffer
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void Lock( GLMBuffLockParams *params, char **addressOut );
|
void Lock( GLMBuffLockParams *params, char **addressOut );
|
||||||
void Unlock( void );
|
void Unlock( void );
|
||||||
|
|
||||||
//protected:
|
//protected:
|
||||||
friend class GLMContext; // only GLMContext can make CGLMBuffer objects
|
friend class GLMContext; // only GLMContext can make CGLMBuffer objects
|
||||||
friend class GLMTester;
|
friend class GLMTester;
|
||||||
friend class IDirect3D9;
|
friend class IDirect3D9;
|
||||||
friend class IDirect3DDevice9;
|
friend class IDirect3DDevice9;
|
||||||
|
|
||||||
CGLMBuffer ( GLMContext *ctx, EGLMBufferType type, uint size, uint options );
|
CGLMBuffer ( GLMContext *ctx, EGLMBufferType type, uint size, uint options );
|
||||||
~CGLMBuffer ( );
|
~CGLMBuffer ( );
|
||||||
|
|
||||||
void SetModes ( bool asyncMap, bool explicitFlush, bool force = false );
|
void SetModes ( bool asyncMap, bool explicitFlush, bool force = false );
|
||||||
void FlushRange ( uint offset, uint size );
|
void FlushRange ( uint offset, uint size );
|
||||||
|
|
||||||
GLMContext *m_ctx; // link back to parent context
|
GLMContext *m_ctx; // link back to parent context
|
||||||
EGLMBufferType m_type;
|
EGLMBufferType m_type;
|
||||||
uint m_size;
|
uint m_size;
|
||||||
GLenum m_buffGLTarget; // GL_ARRAY_BUFFER_ARB / GL_ELEMENT_BUFFER_ARB
|
GLenum m_buffGLTarget; // GL_ARRAY_BUFFER_ARB / GL_ELEMENT_BUFFER_ARB
|
||||||
GLuint m_name; // name of this program in the context
|
GLuint m_name; // name of this program in the context
|
||||||
uint m_revision; // bump anytime the size changes or buffer is orphaned
|
uint m_revision; // bump anytime the size changes or buffer is orphaned
|
||||||
bool m_enableAsyncMap; // mirror of the buffer state
|
bool m_enableAsyncMap; // mirror of the buffer state
|
||||||
bool m_enableExplicitFlush; // mirror of the buffer state
|
bool m_enableExplicitFlush; // mirror of the buffer state
|
||||||
|
|
||||||
bool m_bound; // true if bound to context
|
bool m_bound; // true if bound to context
|
||||||
bool m_mapped; // is it currently mapped
|
bool m_mapped; // is it currently mapped
|
||||||
uint m_dirtyMinOffset; // when equal, range is empty
|
uint m_dirtyMinOffset; // when equal, range is empty
|
||||||
uint m_dirtyMaxOffset;
|
uint m_dirtyMaxOffset;
|
||||||
|
|
||||||
float *m_lastMappedAddress;
|
float *m_lastMappedAddress;
|
||||||
|
|
||||||
// --------------------- pseudo-VBO support below here (explicitly for dynamic index buffers)
|
// --------------------- pseudo-VBO support below here (explicitly for dynamic index buffers)
|
||||||
bool m_pseudo; // true if the m_name is 0, and the backing is plain RAM
|
bool m_pseudo; // true if the m_name is 0, and the backing is plain RAM
|
||||||
|
|
||||||
// in pseudo mode, there is just one RAM buffer that acts as the backing.
|
// in pseudo mode, there is just one RAM buffer that acts as the backing.
|
||||||
// expectation is that this mode would only be used for dynamic indices.
|
// expectation is that this mode would only be used for dynamic indices.
|
||||||
// since indices have to be consumed (copied to command stream) prior to return from a drawing call,
|
// since indices have to be consumed (copied to command stream) prior to return from a drawing call,
|
||||||
// there's no need to do any fencing or multibuffering. orphaning in particular becomes a no-op.
|
// there's no need to do any fencing or multibuffering. orphaning in particular becomes a no-op.
|
||||||
|
|
||||||
char *m_pseudoBuf; // storage for pseudo buffer
|
char *m_pseudoBuf; // storage for pseudo buffer
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -1,91 +1,91 @@
|
|||||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
//
|
//
|
||||||
// cglmfbo.h
|
// cglmfbo.h
|
||||||
// GLMgr FBO's (render targets)
|
// GLMgr FBO's (render targets)
|
||||||
//
|
//
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
#ifndef CGLMFBO_H
|
#ifndef CGLMFBO_H
|
||||||
#define CGLMFBO_H
|
#define CGLMFBO_H
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "togl/rendermechanism.h"
|
#include "togl/rendermechanism.h"
|
||||||
|
|
||||||
// good FBO references / recaps
|
// good FBO references / recaps
|
||||||
// http://www.songho.ca/opengl/gl_fbo.html
|
// http://www.songho.ca/opengl/gl_fbo.html
|
||||||
// http://www.gamedev.net/reference/articles/article2331.asp
|
// http://www.gamedev.net/reference/articles/article2331.asp
|
||||||
|
|
||||||
// ext links
|
// ext links
|
||||||
|
|
||||||
// http://www.opengl.org/registry/specs/EXT/framebuffer_object.txt
|
// http://www.opengl.org/registry/specs/EXT/framebuffer_object.txt
|
||||||
// http://www.opengl.org/registry/specs/EXT/framebuffer_multisample.txt
|
// http://www.opengl.org/registry/specs/EXT/framebuffer_multisample.txt
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// tokens not in the SDK headers
|
// tokens not in the SDK headers
|
||||||
|
|
||||||
#ifndef GL_DEPTH_STENCIL_ATTACHMENT_EXT
|
#ifndef GL_DEPTH_STENCIL_ATTACHMENT_EXT
|
||||||
#define GL_DEPTH_STENCIL_ATTACHMENT_EXT 0x84F9
|
#define GL_DEPTH_STENCIL_ATTACHMENT_EXT 0x84F9
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// forward declarations
|
// forward declarations
|
||||||
|
|
||||||
class GLMContext;
|
class GLMContext;
|
||||||
|
|
||||||
// implicitly 16 maximum color attachments possible
|
// implicitly 16 maximum color attachments possible
|
||||||
enum EGLMFBOAttachment {
|
enum EGLMFBOAttachment {
|
||||||
kAttColor0, kAttColor1, kAttColor2, kAttColor3,
|
kAttColor0, kAttColor1, kAttColor2, kAttColor3,
|
||||||
kAttColor4, kAttColor5, kAttColor6, kAttColor7,
|
kAttColor4, kAttColor5, kAttColor6, kAttColor7,
|
||||||
kAttColor8, kAttColor9, kAttColor10, kAttColor11,
|
kAttColor8, kAttColor9, kAttColor10, kAttColor11,
|
||||||
kAttColor12, kAttColor13, kAttColor14, kAttColor15,
|
kAttColor12, kAttColor13, kAttColor14, kAttColor15,
|
||||||
kAttDepth, kAttStencil, kAttDepthStencil,
|
kAttDepth, kAttStencil, kAttDepthStencil,
|
||||||
kAttCount
|
kAttCount
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GLMFBOTexAttachParams
|
struct GLMFBOTexAttachParams
|
||||||
{
|
{
|
||||||
CGLMTex *m_tex;
|
CGLMTex *m_tex;
|
||||||
int m_face; // keep zero if not cube map
|
int m_face; // keep zero if not cube map
|
||||||
int m_mip; // keep zero if notmip mapped
|
int m_mip; // keep zero if notmip mapped
|
||||||
int m_zslice; // keep zero if not a 3D tex
|
int m_zslice; // keep zero if not a 3D tex
|
||||||
};
|
};
|
||||||
|
|
||||||
class CGLMFBO
|
class CGLMFBO
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class GLMContext; // only GLMContext can make CGLMFBO objects
|
friend class GLMContext; // only GLMContext can make CGLMFBO objects
|
||||||
friend class GLMTester;
|
friend class GLMTester;
|
||||||
friend class CGLMTex;
|
friend class CGLMTex;
|
||||||
|
|
||||||
friend class IDirect3D9;
|
friend class IDirect3D9;
|
||||||
friend class IDirect3DDevice9;
|
friend class IDirect3DDevice9;
|
||||||
|
|
||||||
CGLMFBO( GLMContext *ctx );
|
CGLMFBO( GLMContext *ctx );
|
||||||
~CGLMFBO( );
|
~CGLMFBO( );
|
||||||
|
|
||||||
void TexAttach( GLMFBOTexAttachParams *params, EGLMFBOAttachment attachIndex, GLenum fboBindPoint = GL_FRAMEBUFFER_EXT );
|
void TexAttach( GLMFBOTexAttachParams *params, EGLMFBOAttachment attachIndex, GLenum fboBindPoint = GL_FRAMEBUFFER_EXT );
|
||||||
void TexDetach( EGLMFBOAttachment attachIndex, GLenum fboBindPoint = GL_FRAMEBUFFER_EXT );
|
void TexDetach( EGLMFBOAttachment attachIndex, GLenum fboBindPoint = GL_FRAMEBUFFER_EXT );
|
||||||
// you can also pass GL_READ_FRAMEBUFFER_EXT or GL_DRAW_FRAMEBUFFER_EXT to selectively bind the receiving FBO to one or the other.
|
// you can also pass GL_READ_FRAMEBUFFER_EXT or GL_DRAW_FRAMEBUFFER_EXT to selectively bind the receiving FBO to one or the other.
|
||||||
|
|
||||||
void TexScrub( CGLMTex *tex );
|
void TexScrub( CGLMTex *tex );
|
||||||
// search and destroy any attachment for the named texture
|
// search and destroy any attachment for the named texture
|
||||||
|
|
||||||
bool IsReady( void ); // aka FBO completeness check - ready to draw
|
bool IsReady( void ); // aka FBO completeness check - ready to draw
|
||||||
|
|
||||||
GLMContext *m_ctx; // link back to parent context
|
GLMContext *m_ctx; // link back to parent context
|
||||||
|
|
||||||
GLuint m_name; // name of this FBO in the context
|
GLuint m_name; // name of this FBO in the context
|
||||||
|
|
||||||
GLMFBOTexAttachParams m_attach[ kAttCount ]; // indexed by EGLMFBOAttachment
|
GLMFBOTexAttachParams m_attach[ kAttCount ]; // indexed by EGLMFBOAttachment
|
||||||
|
|
||||||
int m_sizeX,m_sizeY;
|
int m_sizeX,m_sizeY;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,291 +1,291 @@
|
|||||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
//
|
//
|
||||||
// cglmprogram.h
|
// cglmprogram.h
|
||||||
// GLMgr programs (ARBVP/ARBfp)
|
// GLMgr programs (ARBVP/ARBfp)
|
||||||
//
|
//
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
#ifndef CGLMPROGRAM_H
|
#ifndef CGLMPROGRAM_H
|
||||||
#define CGLMPROGRAM_H
|
#define CGLMPROGRAM_H
|
||||||
|
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// good ARB program references
|
// good ARB program references
|
||||||
// http://petewarden.com/notes/archives/2005/05/fragment_progra_2.html
|
// http://petewarden.com/notes/archives/2005/05/fragment_progra_2.html
|
||||||
// http://petewarden.com/notes/archives/2005/06/fragment_progra_3.html
|
// http://petewarden.com/notes/archives/2005/06/fragment_progra_3.html
|
||||||
|
|
||||||
// ext links
|
// ext links
|
||||||
|
|
||||||
// http://www.opengl.org/registry/specs/ARB/vertex_program.txt
|
// http://www.opengl.org/registry/specs/ARB/vertex_program.txt
|
||||||
// http://www.opengl.org/registry/specs/ARB/fragment_program.txt
|
// http://www.opengl.org/registry/specs/ARB/fragment_program.txt
|
||||||
// http://www.opengl.org/registry/specs/EXT/gpu_program_parameters.txt
|
// http://www.opengl.org/registry/specs/EXT/gpu_program_parameters.txt
|
||||||
|
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// tokens not in the SDK headers
|
// tokens not in the SDK headers
|
||||||
|
|
||||||
//#ifndef GL_DEPTH_STENCIL_ATTACHMENT_EXT
|
//#ifndef GL_DEPTH_STENCIL_ATTACHMENT_EXT
|
||||||
// #define GL_DEPTH_STENCIL_ATTACHMENT_EXT 0x84F9
|
// #define GL_DEPTH_STENCIL_ATTACHMENT_EXT 0x84F9
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// forward declarations
|
// forward declarations
|
||||||
|
|
||||||
class GLMContext;
|
class GLMContext;
|
||||||
class CGLMShaderPair;
|
class CGLMShaderPair;
|
||||||
class CGLMShaderPairCache;
|
class CGLMShaderPairCache;
|
||||||
|
|
||||||
// CGLMProgram can contain two flavors of the same program, one in assembler, one in GLSL.
|
// CGLMProgram can contain two flavors of the same program, one in assembler, one in GLSL.
|
||||||
// these flavors are pretty different in terms of the API's that are used to activate them -
|
// these flavors are pretty different in terms of the API's that are used to activate them -
|
||||||
// for example, assembler programs can just get bound to the context, whereas GLSL programs
|
// for example, assembler programs can just get bound to the context, whereas GLSL programs
|
||||||
// have to be linked. To some extent we try to hide that detail inside GLM.
|
// have to be linked. To some extent we try to hide that detail inside GLM.
|
||||||
|
|
||||||
// for now, make CGLMProgram a container, it does not set policy or hold a preference as to which
|
// for now, make CGLMProgram a container, it does not set policy or hold a preference as to which
|
||||||
// flavor you want to use. GLMContext has to handle that.
|
// flavor you want to use. GLMContext has to handle that.
|
||||||
|
|
||||||
enum EGLMProgramType
|
enum EGLMProgramType
|
||||||
{
|
{
|
||||||
kGLMVertexProgram,
|
kGLMVertexProgram,
|
||||||
kGLMFragmentProgram,
|
kGLMFragmentProgram,
|
||||||
|
|
||||||
kGLMNumProgramTypes
|
kGLMNumProgramTypes
|
||||||
};
|
};
|
||||||
|
|
||||||
enum EGLMProgramLang
|
enum EGLMProgramLang
|
||||||
{
|
{
|
||||||
kGLMARB,
|
kGLMARB,
|
||||||
kGLMGLSL,
|
kGLMGLSL,
|
||||||
|
|
||||||
kGLMNumProgramLangs
|
kGLMNumProgramLangs
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GLMShaderDesc
|
struct GLMShaderDesc
|
||||||
{
|
{
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
GLuint arb; // ARB program object name
|
GLuint arb; // ARB program object name
|
||||||
GLhandleARB glsl; // GLSL shader object handle (void*)
|
GLhandleARB glsl; // GLSL shader object handle (void*)
|
||||||
} m_object;
|
} m_object;
|
||||||
|
|
||||||
// these can change if shader text is edited
|
// these can change if shader text is edited
|
||||||
bool m_textPresent; // is this flavor(lang) of text present in the buffer?
|
bool m_textPresent; // is this flavor(lang) of text present in the buffer?
|
||||||
int m_textOffset; // where is it
|
int m_textOffset; // where is it
|
||||||
int m_textLength; // how big
|
int m_textLength; // how big
|
||||||
|
|
||||||
bool m_compiled; // has this text been through a compile attempt
|
bool m_compiled; // has this text been through a compile attempt
|
||||||
bool m_valid; // and if so, was the compile successful
|
bool m_valid; // and if so, was the compile successful
|
||||||
|
|
||||||
int m_slowMark; // has it been flagged during a non native draw batch before. increment every time it's slow.
|
int m_slowMark; // has it been flagged during a non native draw batch before. increment every time it's slow.
|
||||||
|
|
||||||
int m_highWater; // vount of vec4's in the major uniform array ("vc" on vs, "pc" on ps)
|
int m_highWater; // vount of vec4's in the major uniform array ("vc" on vs, "pc" on ps)
|
||||||
// written by dxabstract.... gross!
|
// written by dxabstract.... gross!
|
||||||
};
|
};
|
||||||
|
|
||||||
GLenum GLMProgTypeToARBEnum( EGLMProgramType type ); // map vert/frag to ARB asm bind target
|
GLenum GLMProgTypeToARBEnum( EGLMProgramType type ); // map vert/frag to ARB asm bind target
|
||||||
GLenum GLMProgTypeToGLSLEnum( EGLMProgramType type ); // map vert/frag to ARB asm bind target
|
GLenum GLMProgTypeToGLSLEnum( EGLMProgramType type ); // map vert/frag to ARB asm bind target
|
||||||
|
|
||||||
class CGLMProgram
|
class CGLMProgram
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
friend class CGLMShaderPairCache;
|
friend class CGLMShaderPairCache;
|
||||||
friend class CGLMShaderPair;
|
friend class CGLMShaderPair;
|
||||||
friend class GLMContext; // only GLMContext can make CGLMProgram objects
|
friend class GLMContext; // only GLMContext can make CGLMProgram objects
|
||||||
friend class GLMTester;
|
friend class GLMTester;
|
||||||
friend class IDirect3D9;
|
friend class IDirect3D9;
|
||||||
friend class IDirect3DDevice9;
|
friend class IDirect3DDevice9;
|
||||||
|
|
||||||
//===============================
|
//===============================
|
||||||
|
|
||||||
// constructor is very light, it just makes one empty program object per flavor.
|
// constructor is very light, it just makes one empty program object per flavor.
|
||||||
CGLMProgram( GLMContext *ctx, EGLMProgramType type );
|
CGLMProgram( GLMContext *ctx, EGLMProgramType type );
|
||||||
~CGLMProgram( );
|
~CGLMProgram( );
|
||||||
|
|
||||||
void SetProgramText ( char *text ); // import text to GLM object - invalidate any prev compiled program
|
void SetProgramText ( char *text ); // import text to GLM object - invalidate any prev compiled program
|
||||||
|
|
||||||
bool CompileActiveSources ( void ); // compile only the flavors that were provided.
|
bool CompileActiveSources ( void ); // compile only the flavors that were provided.
|
||||||
bool Compile ( EGLMProgramLang lang );
|
bool Compile ( EGLMProgramLang lang );
|
||||||
bool CheckValidity ( EGLMProgramLang lang );
|
bool CheckValidity ( EGLMProgramLang lang );
|
||||||
|
|
||||||
void LogSlow ( EGLMProgramLang lang ); // detailed spew when called for first time; one liner or perhaps silence after that
|
void LogSlow ( EGLMProgramLang lang ); // detailed spew when called for first time; one liner or perhaps silence after that
|
||||||
|
|
||||||
void GetLabelIndexCombo ( char *labelOut, int labelOutMaxChars, int *indexOut, int *comboOut );
|
void GetLabelIndexCombo ( char *labelOut, int labelOutMaxChars, int *indexOut, int *comboOut );
|
||||||
void GetComboIndexNameString ( char *stringOut, int stringOutMaxChars ); // mmmmmmmm-nnnnnnnn-filename
|
void GetComboIndexNameString ( char *stringOut, int stringOutMaxChars ); // mmmmmmmm-nnnnnnnn-filename
|
||||||
|
|
||||||
#if GLMDEBUG
|
#if GLMDEBUG
|
||||||
bool PollForChanges( void ); // check mirror for changes.
|
bool PollForChanges( void ); // check mirror for changes.
|
||||||
void ReloadStringFromEditable( void ); // populate m_string from editable item (react to change)
|
void ReloadStringFromEditable( void ); // populate m_string from editable item (react to change)
|
||||||
bool SyncWithEditable( void );
|
bool SyncWithEditable( void );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//===============================
|
//===============================
|
||||||
|
|
||||||
// common stuff
|
// common stuff
|
||||||
|
|
||||||
GLMContext *m_ctx; // link back to parent context
|
GLMContext *m_ctx; // link back to parent context
|
||||||
|
|
||||||
EGLMProgramType m_type; // vertex or pixel
|
EGLMProgramType m_type; // vertex or pixel
|
||||||
|
|
||||||
uint m_serial; // serial number for hashing
|
uint m_serial; // serial number for hashing
|
||||||
|
|
||||||
char *m_text; // copy of text passed into constructor. Can change if editable shaders is enabled.
|
char *m_text; // copy of text passed into constructor. Can change if editable shaders is enabled.
|
||||||
// note - it can contain multiple flavors, so use CGLMTextSectioner to scan it and locate them
|
// note - it can contain multiple flavors, so use CGLMTextSectioner to scan it and locate them
|
||||||
#if GLMDEBUG
|
#if GLMDEBUG
|
||||||
CGLMEditableTextItem *m_editable; // editable text item for debugging
|
CGLMEditableTextItem *m_editable; // editable text item for debugging
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GLMShaderDesc m_descs[ kGLMNumProgramLangs ];
|
GLMShaderDesc m_descs[ kGLMNumProgramLangs ];
|
||||||
|
|
||||||
uint m_samplerMask; // (1<<n) mask of sampler active locs, if this is a fragment shader (dxabstract sets this field)
|
uint m_samplerMask; // (1<<n) mask of sampler active locs, if this is a fragment shader (dxabstract sets this field)
|
||||||
};
|
};
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
struct GLMShaderPairInfo
|
struct GLMShaderPairInfo
|
||||||
{
|
{
|
||||||
int m_status; // -1 means req'd index was out of bounds (loop stop..) 0 means not present. 1 means present/active.
|
int m_status; // -1 means req'd index was out of bounds (loop stop..) 0 means not present. 1 means present/active.
|
||||||
|
|
||||||
char m_vsName[ 128 ];
|
char m_vsName[ 128 ];
|
||||||
int m_vsStaticIndex;
|
int m_vsStaticIndex;
|
||||||
int m_vsDynamicIndex;
|
int m_vsDynamicIndex;
|
||||||
|
|
||||||
char m_psName[ 128 ];
|
char m_psName[ 128 ];
|
||||||
int m_psStaticIndex;
|
int m_psStaticIndex;
|
||||||
int m_psDynamicIndex;
|
int m_psDynamicIndex;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class CGLMShaderPair // a container for a linked GLSL shader pair, and metadata obtained post-link
|
class CGLMShaderPair // a container for a linked GLSL shader pair, and metadata obtained post-link
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
friend class CGLMProgram;
|
friend class CGLMProgram;
|
||||||
friend class GLMContext;
|
friend class GLMContext;
|
||||||
friend class CGLMShaderPairCache;
|
friend class CGLMShaderPairCache;
|
||||||
|
|
||||||
//===============================
|
//===============================
|
||||||
|
|
||||||
// constructor just sets up a GLSL program object and leaves it empty.
|
// constructor just sets up a GLSL program object and leaves it empty.
|
||||||
CGLMShaderPair( GLMContext *ctx );
|
CGLMShaderPair( GLMContext *ctx );
|
||||||
~CGLMShaderPair( );
|
~CGLMShaderPair( );
|
||||||
|
|
||||||
bool SetProgramPair ( CGLMProgram *vp, CGLMProgram *fp );
|
bool SetProgramPair ( CGLMProgram *vp, CGLMProgram *fp );
|
||||||
// true result means successful link and query
|
// true result means successful link and query
|
||||||
|
|
||||||
bool RefreshProgramPair ( void );
|
bool RefreshProgramPair ( void );
|
||||||
// re-link and re-query the uniforms
|
// re-link and re-query the uniforms
|
||||||
|
|
||||||
//===============================
|
//===============================
|
||||||
|
|
||||||
// common stuff
|
// common stuff
|
||||||
|
|
||||||
GLMContext *m_ctx; // link back to parent context
|
GLMContext *m_ctx; // link back to parent context
|
||||||
|
|
||||||
CGLMProgram *m_vertexProg;
|
CGLMProgram *m_vertexProg;
|
||||||
CGLMProgram *m_fragmentProg;
|
CGLMProgram *m_fragmentProg;
|
||||||
|
|
||||||
GLhandleARB m_program; // linked program object
|
GLhandleARB m_program; // linked program object
|
||||||
|
|
||||||
// need meta data for attribs / samplers / params
|
// need meta data for attribs / samplers / params
|
||||||
// actually we only need it for samplers and params.
|
// actually we only need it for samplers and params.
|
||||||
// attributes are hardwired.
|
// attributes are hardwired.
|
||||||
|
|
||||||
// vertex stage uniforms
|
// vertex stage uniforms
|
||||||
GLint m_locVertexParams; // "vc" per dx9asmtogl2 convention
|
GLint m_locVertexParams; // "vc" per dx9asmtogl2 convention
|
||||||
GLint m_locVertexInteger0; // "i0"
|
GLint m_locVertexInteger0; // "i0"
|
||||||
GLint m_locVertexBool0; // "b0"
|
GLint m_locVertexBool0; // "b0"
|
||||||
GLint m_locVertexBool1; // "b1"
|
GLint m_locVertexBool1; // "b1"
|
||||||
GLint m_locVertexBool2; // "b2"
|
GLint m_locVertexBool2; // "b2"
|
||||||
GLint m_locVertexBool3; // "b3"
|
GLint m_locVertexBool3; // "b3"
|
||||||
|
|
||||||
// fragment stage uniforms
|
// fragment stage uniforms
|
||||||
GLint m_locFragmentParams; // "pc" per dx9asmtogl2 convention
|
GLint m_locFragmentParams; // "pc" per dx9asmtogl2 convention
|
||||||
GLint m_locFragmentFakeSRGBEnable; // "flSRGBWrite" - set to 1.0 to effect sRGB encoding on output
|
GLint m_locFragmentFakeSRGBEnable; // "flSRGBWrite" - set to 1.0 to effect sRGB encoding on output
|
||||||
float m_fakeSRGBEnableValue; // shadow to avoid redundant sets of the m_locFragmentFakeSRGBEnable uniform
|
float m_fakeSRGBEnableValue; // shadow to avoid redundant sets of the m_locFragmentFakeSRGBEnable uniform
|
||||||
// init it to -1.0 at link or relink, so it will trip on any legit incoming value (0.0 or 1.0)
|
// init it to -1.0 at link or relink, so it will trip on any legit incoming value (0.0 or 1.0)
|
||||||
|
|
||||||
GLint m_locSamplers[ 16 ]; // "sampler0 ... sampler1..."
|
GLint m_locSamplers[ 16 ]; // "sampler0 ... sampler1..."
|
||||||
|
|
||||||
// other stuff
|
// other stuff
|
||||||
bool m_valid; // true on successful link
|
bool m_valid; // true on successful link
|
||||||
bool m_samplersFixed; // set on first draw (can't write the uniforms until the program is in use, and we don't want to mess with cur program inside cglmprogram)
|
bool m_samplersFixed; // set on first draw (can't write the uniforms until the program is in use, and we don't want to mess with cur program inside cglmprogram)
|
||||||
uint m_revision; // if this pair is relinked, bump this number.
|
uint m_revision; // if this pair is relinked, bump this number.
|
||||||
};
|
};
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// N-row, M-way associative cache with LRU per row.
|
// N-row, M-way associative cache with LRU per row.
|
||||||
// still needs some metric dump ability and some parameter tuning.
|
// still needs some metric dump ability and some parameter tuning.
|
||||||
// extra credit would be to make an auto-tuner.
|
// extra credit would be to make an auto-tuner.
|
||||||
|
|
||||||
struct CGLMPairCacheEntry
|
struct CGLMPairCacheEntry
|
||||||
{
|
{
|
||||||
long long m_lastMark; // a mark of zero means an empty entry
|
long long m_lastMark; // a mark of zero means an empty entry
|
||||||
CGLMProgram *m_vertexProg;
|
CGLMProgram *m_vertexProg;
|
||||||
CGLMProgram *m_fragmentProg;
|
CGLMProgram *m_fragmentProg;
|
||||||
uint m_extraKeyBits;
|
uint m_extraKeyBits;
|
||||||
CGLMShaderPair *m_pair;
|
CGLMShaderPair *m_pair;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CGLMShaderPairCache // cache for linked GLSL shader pairs
|
class CGLMShaderPairCache // cache for linked GLSL shader pairs
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class CGLMShaderPair;
|
friend class CGLMShaderPair;
|
||||||
friend class CGLMProgram;
|
friend class CGLMProgram;
|
||||||
friend class GLMContext;
|
friend class GLMContext;
|
||||||
|
|
||||||
//===============================
|
//===============================
|
||||||
|
|
||||||
CGLMShaderPairCache( GLMContext *ctx );
|
CGLMShaderPairCache( GLMContext *ctx );
|
||||||
~CGLMShaderPairCache( );
|
~CGLMShaderPairCache( );
|
||||||
|
|
||||||
CGLMShaderPair *SelectShaderPair ( CGLMProgram *vp, CGLMProgram *fp, uint extraKeyBits );
|
CGLMShaderPair *SelectShaderPair ( CGLMProgram *vp, CGLMProgram *fp, uint extraKeyBits );
|
||||||
void QueryShaderPair ( int index, GLMShaderPairInfo *infoOut );
|
void QueryShaderPair ( int index, GLMShaderPairInfo *infoOut );
|
||||||
|
|
||||||
// shoot down linked pairs that use the program in the arg
|
// shoot down linked pairs that use the program in the arg
|
||||||
// return true if any had to be skipped due to conflict with currently bound pair
|
// return true if any had to be skipped due to conflict with currently bound pair
|
||||||
bool PurgePairsWithShader( CGLMProgram *prog );
|
bool PurgePairsWithShader( CGLMProgram *prog );
|
||||||
|
|
||||||
// purge everything (when would GLM know how to do this ? at context destroy time, but any other times?)
|
// purge everything (when would GLM know how to do this ? at context destroy time, but any other times?)
|
||||||
// return true if any had to be skipped due to conflict with currently bound pair
|
// return true if any had to be skipped due to conflict with currently bound pair
|
||||||
bool Purge ( void );
|
bool Purge ( void );
|
||||||
|
|
||||||
// stats
|
// stats
|
||||||
void DumpStats ( void );
|
void DumpStats ( void );
|
||||||
|
|
||||||
//===============================
|
//===============================
|
||||||
|
|
||||||
uint HashRowIndex ( CGLMProgram *vp, CGLMProgram *fp, uint extraKeyBits );
|
uint HashRowIndex ( CGLMProgram *vp, CGLMProgram *fp, uint extraKeyBits );
|
||||||
CGLMPairCacheEntry* HashRowPtr ( uint hashRowIndex );
|
CGLMPairCacheEntry* HashRowPtr ( uint hashRowIndex );
|
||||||
void HashRowProbe ( CGLMPairCacheEntry *row, CGLMProgram *vp, CGLMProgram *fp, uint extraKeyBits, int *hitwayOut, int *emptywayOut, int *oldestwayOut );
|
void HashRowProbe ( CGLMPairCacheEntry *row, CGLMProgram *vp, CGLMProgram *fp, uint extraKeyBits, int *hitwayOut, int *emptywayOut, int *oldestwayOut );
|
||||||
//===============================
|
//===============================
|
||||||
|
|
||||||
// common stuff
|
// common stuff
|
||||||
|
|
||||||
GLMContext *m_ctx; // link back to parent context
|
GLMContext *m_ctx; // link back to parent context
|
||||||
|
|
||||||
long long m_mark;
|
long long m_mark;
|
||||||
|
|
||||||
uint m_rowsLg2;
|
uint m_rowsLg2;
|
||||||
uint m_rows;
|
uint m_rows;
|
||||||
|
|
||||||
uint m_waysLg2;
|
uint m_waysLg2;
|
||||||
uint m_ways;
|
uint m_ways;
|
||||||
|
|
||||||
uint m_entryCount;
|
uint m_entryCount;
|
||||||
|
|
||||||
CGLMPairCacheEntry *m_entries; // array[ m_rows ][ m_ways ]
|
CGLMPairCacheEntry *m_entries; // array[ m_rows ][ m_ways ]
|
||||||
|
|
||||||
uint *m_evictions; // array[ m_rows ];
|
uint *m_evictions; // array[ m_rows ];
|
||||||
uint *m_hits; // array[ m_rows ];
|
uint *m_hits; // array[ m_rows ];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -1,85 +1,85 @@
|
|||||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
//
|
//
|
||||||
// cglmquery.h
|
// cglmquery.h
|
||||||
// GLMgr queries
|
// GLMgr queries
|
||||||
//
|
//
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
#ifndef CGLMQUERY_H
|
#ifndef CGLMQUERY_H
|
||||||
#define CGLMQUERY_H
|
#define CGLMQUERY_H
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// forward declarations
|
// forward declarations
|
||||||
|
|
||||||
class GLMContext;
|
class GLMContext;
|
||||||
class CGLMQuery;
|
class CGLMQuery;
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
enum EGLMQueryType
|
enum EGLMQueryType
|
||||||
{
|
{
|
||||||
EOcclusion,
|
EOcclusion,
|
||||||
EFence,
|
EFence,
|
||||||
EGLMQueryCount
|
EGLMQueryCount
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GLMQueryParams
|
struct GLMQueryParams
|
||||||
{
|
{
|
||||||
EGLMQueryType m_type;
|
EGLMQueryType m_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CGLMQuery
|
class CGLMQuery
|
||||||
{
|
{
|
||||||
// leave everything public til it's running
|
// leave everything public til it's running
|
||||||
public:
|
public:
|
||||||
friend class GLMContext; // only GLMContext can make CGLMTex objects
|
friend class GLMContext; // only GLMContext can make CGLMTex objects
|
||||||
friend class IDirect3DDevice9;
|
friend class IDirect3DDevice9;
|
||||||
friend class IDirect3DQuery9;
|
friend class IDirect3DQuery9;
|
||||||
|
|
||||||
GLMContext *m_ctx; // link back to parent context
|
GLMContext *m_ctx; // link back to parent context
|
||||||
GLMQueryParams m_params; // params created with
|
GLMQueryParams m_params; // params created with
|
||||||
|
|
||||||
GLuint m_name; // name of the query object per se - could be fence, could be query object ... NOT USED WITH GL_ARB_sync!
|
GLuint m_name; // name of the query object per se - could be fence, could be query object ... NOT USED WITH GL_ARB_sync!
|
||||||
#ifdef HAVE_GL_ARB_SYNC
|
#ifdef HAVE_GL_ARB_SYNC
|
||||||
GLsync m_syncobj; // GL_ARB_sync object. NOT USED WITH GL_NV_fence or GL_APPLE_fence!
|
GLsync m_syncobj; // GL_ARB_sync object. NOT USED WITH GL_NV_fence or GL_APPLE_fence!
|
||||||
#else
|
#else
|
||||||
GLuint m_syncobj;
|
GLuint m_syncobj;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool m_started;
|
bool m_started;
|
||||||
bool m_stopped;
|
bool m_stopped;
|
||||||
bool m_done;
|
bool m_done;
|
||||||
|
|
||||||
bool m_nullQuery; // was gl_nullqueries true at Start time - if so, continue to act like a null query through Stop/IsDone/Complete time
|
bool m_nullQuery; // was gl_nullqueries true at Start time - if so, continue to act like a null query through Stop/IsDone/Complete time
|
||||||
// restated - only Start should examine the convar.
|
// restated - only Start should examine the convar.
|
||||||
|
|
||||||
CGLMQuery( GLMContext *ctx, GLMQueryParams *params );
|
CGLMQuery( GLMContext *ctx, GLMQueryParams *params );
|
||||||
~CGLMQuery( );
|
~CGLMQuery( );
|
||||||
|
|
||||||
// for an occlusion query:
|
// for an occlusion query:
|
||||||
// Start = BeginQuery query-start goes into stream
|
// Start = BeginQuery query-start goes into stream
|
||||||
// Stop = EndQuery query-end goes into stream - a fence is also set so we can probe for completion
|
// Stop = EndQuery query-end goes into stream - a fence is also set so we can probe for completion
|
||||||
// IsDone = TestFence use the added fence to ask if query-end has passed (i.e. will Complete block?)
|
// IsDone = TestFence use the added fence to ask if query-end has passed (i.e. will Complete block?)
|
||||||
// Complete = GetQueryObjectuivARB(uint id, enum pname, uint *params) - extract the sample count
|
// Complete = GetQueryObjectuivARB(uint id, enum pname, uint *params) - extract the sample count
|
||||||
|
|
||||||
// for a fence query:
|
// for a fence query:
|
||||||
// Start = SetFence fence goes into command stream
|
// Start = SetFence fence goes into command stream
|
||||||
// Stop = NOP fences are self finishing - no need to call Stop on a fence
|
// Stop = NOP fences are self finishing - no need to call Stop on a fence
|
||||||
// IsDone = TestFence ask if fence passed
|
// IsDone = TestFence ask if fence passed
|
||||||
// Complete = FinishFence
|
// Complete = FinishFence
|
||||||
|
|
||||||
void Start ( void );
|
void Start ( void );
|
||||||
void Stop ( void );
|
void Stop ( void );
|
||||||
bool IsDone ( void );
|
bool IsDone ( void );
|
||||||
void Complete ( uint *result );
|
void Complete ( uint *result );
|
||||||
|
|
||||||
// accessors for the started/stopped state
|
// accessors for the started/stopped state
|
||||||
bool IsStarted ( void );
|
bool IsStarted ( void );
|
||||||
bool IsStopped ( void );
|
bool IsStopped ( void );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,273 +1,273 @@
|
|||||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
//
|
//
|
||||||
// cglmtex.h
|
// cglmtex.h
|
||||||
// GLMgr textures
|
// GLMgr textures
|
||||||
//
|
//
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
#ifndef CGLMTEX_H
|
#ifndef CGLMTEX_H
|
||||||
#define CGLMTEX_H
|
#define CGLMTEX_H
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "tier1/utlhash.h"
|
#include "tier1/utlhash.h"
|
||||||
#include "tier1/utlmap.h"
|
#include "tier1/utlmap.h"
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// forward declarations
|
// forward declarations
|
||||||
|
|
||||||
class GLMContext;
|
class GLMContext;
|
||||||
class GLMTester;
|
class GLMTester;
|
||||||
class CGLMTexLayoutTable;
|
class CGLMTexLayoutTable;
|
||||||
class CGLMTex;
|
class CGLMTex;
|
||||||
class CGLMFBO;
|
class CGLMFBO;
|
||||||
|
|
||||||
class IDirect3DSurface9;
|
class IDirect3DSurface9;
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
struct GLMTexFormatDesc
|
struct GLMTexFormatDesc
|
||||||
{
|
{
|
||||||
char *m_formatSummary; // for debug visibility
|
char *m_formatSummary; // for debug visibility
|
||||||
|
|
||||||
D3DFORMAT m_d3dFormat; // what D3D knows it as; see public/bitmap/imageformat.h
|
D3DFORMAT m_d3dFormat; // what D3D knows it as; see public/bitmap/imageformat.h
|
||||||
|
|
||||||
GLenum m_glIntFormat; // GL internal format
|
GLenum m_glIntFormat; // GL internal format
|
||||||
GLenum m_glIntFormatSRGB; // internal format if SRGB flavor
|
GLenum m_glIntFormatSRGB; // internal format if SRGB flavor
|
||||||
GLenum m_glDataFormat; // GL data format
|
GLenum m_glDataFormat; // GL data format
|
||||||
GLenum m_glDataType; // GL data type
|
GLenum m_glDataType; // GL data type
|
||||||
|
|
||||||
int m_chunkSize; // 1 or 4 - 4 is used for compressed textures
|
int m_chunkSize; // 1 or 4 - 4 is used for compressed textures
|
||||||
int m_bytesPerSquareChunk; // how many bytes for the smallest quantum (m_chunkSize x m_chunkSize)
|
int m_bytesPerSquareChunk; // how many bytes for the smallest quantum (m_chunkSize x m_chunkSize)
|
||||||
// this description lets us calculate size cleanly without conditional logic for compression
|
// this description lets us calculate size cleanly without conditional logic for compression
|
||||||
};
|
};
|
||||||
const GLMTexFormatDesc *GetFormatDesc( D3DFORMAT format );
|
const GLMTexFormatDesc *GetFormatDesc( D3DFORMAT format );
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// utility function for generating slabs of texels. mostly for test.
|
// utility function for generating slabs of texels. mostly for test.
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
// in
|
// in
|
||||||
D3DFORMAT m_format;
|
D3DFORMAT m_format;
|
||||||
void *m_dest; // dest address
|
void *m_dest; // dest address
|
||||||
int m_chunkCount; // square chunk count (single texels or compressed blocks)
|
int m_chunkCount; // square chunk count (single texels or compressed blocks)
|
||||||
int m_byteCountLimit; // caller expectation of max number of bytes to write out
|
int m_byteCountLimit; // caller expectation of max number of bytes to write out
|
||||||
float r,g,b,a; // color desired
|
float r,g,b,a; // color desired
|
||||||
|
|
||||||
// out
|
// out
|
||||||
int m_bytesWritten;
|
int m_bytesWritten;
|
||||||
} GLMGenTexelParams;
|
} GLMGenTexelParams;
|
||||||
|
|
||||||
// return true if successful
|
// return true if successful
|
||||||
bool GLMGenTexels( GLMGenTexelParams *params );
|
bool GLMGenTexels( GLMGenTexelParams *params );
|
||||||
|
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
struct GLMTexLayoutSlice
|
struct GLMTexLayoutSlice
|
||||||
{
|
{
|
||||||
int m_xSize,m_ySize,m_zSize; //texel dimensions of this slice
|
int m_xSize,m_ySize,m_zSize; //texel dimensions of this slice
|
||||||
int m_storageOffset; //where in the storage slab does this slice live
|
int m_storageOffset; //where in the storage slab does this slice live
|
||||||
int m_storageSize; //how much storage does this slice occupy
|
int m_storageSize; //how much storage does this slice occupy
|
||||||
};
|
};
|
||||||
|
|
||||||
enum EGLMTexFlags
|
enum EGLMTexFlags
|
||||||
{
|
{
|
||||||
kGLMTexMipped = 0x01,
|
kGLMTexMipped = 0x01,
|
||||||
kGLMTexMippedAuto = 0x02,
|
kGLMTexMippedAuto = 0x02,
|
||||||
kGLMTexRenderable = 0x04,
|
kGLMTexRenderable = 0x04,
|
||||||
kGLMTexIsStencil = 0x08,
|
kGLMTexIsStencil = 0x08,
|
||||||
kGLMTexIsDepth = 0x10,
|
kGLMTexIsDepth = 0x10,
|
||||||
kGLMTexSRGB = 0x20,
|
kGLMTexSRGB = 0x20,
|
||||||
kGLMTexMultisampled = 0x40, // has an RBO backing it. Cannot combine with Mipped, MippedAuto. One slice maximum, only targeting GL_TEXTURE_2D.
|
kGLMTexMultisampled = 0x40, // has an RBO backing it. Cannot combine with Mipped, MippedAuto. One slice maximum, only targeting GL_TEXTURE_2D.
|
||||||
// actually not 100% positive on the mipmapping, the RBO itself can't be mipped, but the resulting texture could
|
// actually not 100% positive on the mipmapping, the RBO itself can't be mipped, but the resulting texture could
|
||||||
// have mipmaps generated.
|
// have mipmaps generated.
|
||||||
};
|
};
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
struct GLMTexLayoutKey
|
struct GLMTexLayoutKey
|
||||||
{
|
{
|
||||||
// input values: held const, these are the hash key for the form map
|
// input values: held const, these are the hash key for the form map
|
||||||
GLenum m_texGLTarget; // flavor of texture: GL_TEXTURE_2D, GL_TEXTURE_3D, GLTEXTURE_CUBE_MAP
|
GLenum m_texGLTarget; // flavor of texture: GL_TEXTURE_2D, GL_TEXTURE_3D, GLTEXTURE_CUBE_MAP
|
||||||
D3DFORMAT m_texFormat; // D3D texel format
|
D3DFORMAT m_texFormat; // D3D texel format
|
||||||
unsigned long m_texFlags; // mipped, autogen mips, render target, ... ?
|
unsigned long m_texFlags; // mipped, autogen mips, render target, ... ?
|
||||||
unsigned long m_texSamples; // zero for a plain tex, 2/4/6/8 for "MSAA tex" (RBO backed)
|
unsigned long m_texSamples; // zero for a plain tex, 2/4/6/8 for "MSAA tex" (RBO backed)
|
||||||
int m_xSize,m_ySize,m_zSize; // size of base mip
|
int m_xSize,m_ySize,m_zSize; // size of base mip
|
||||||
};
|
};
|
||||||
|
|
||||||
bool LessFunc_GLMTexLayoutKey( const GLMTexLayoutKey &a, const GLMTexLayoutKey &b );
|
bool LessFunc_GLMTexLayoutKey( const GLMTexLayoutKey &a, const GLMTexLayoutKey &b );
|
||||||
|
|
||||||
#define GLM_TEX_MAX_MIPS 14
|
#define GLM_TEX_MAX_MIPS 14
|
||||||
#define GLM_TEX_MAX_FACES 6
|
#define GLM_TEX_MAX_FACES 6
|
||||||
#define GLM_TEX_MAX_SLICES (GLM_TEX_MAX_MIPS * GLM_TEX_MAX_FACES)
|
#define GLM_TEX_MAX_SLICES (GLM_TEX_MAX_MIPS * GLM_TEX_MAX_FACES)
|
||||||
|
|
||||||
struct GLMTexLayout
|
struct GLMTexLayout
|
||||||
{
|
{
|
||||||
char *m_layoutSummary; // for debug visibility
|
char *m_layoutSummary; // for debug visibility
|
||||||
|
|
||||||
// const inputs used for hashing
|
// const inputs used for hashing
|
||||||
GLMTexLayoutKey m_key;
|
GLMTexLayoutKey m_key;
|
||||||
|
|
||||||
// refcount
|
// refcount
|
||||||
int m_refCount;
|
int m_refCount;
|
||||||
|
|
||||||
// derived values:
|
// derived values:
|
||||||
GLMTexFormatDesc *m_format; // format specific info
|
GLMTexFormatDesc *m_format; // format specific info
|
||||||
int m_mipCount; // derived by starying at base size and working down towards 1x1
|
int m_mipCount; // derived by starying at base size and working down towards 1x1
|
||||||
int m_faceCount; // 1 for 2d/3d, 6 for cubemap
|
int m_faceCount; // 1 for 2d/3d, 6 for cubemap
|
||||||
int m_sliceCount; // product of faces and mips
|
int m_sliceCount; // product of faces and mips
|
||||||
int m_storageTotalSize; // size of storage slab required
|
int m_storageTotalSize; // size of storage slab required
|
||||||
|
|
||||||
// slice array
|
// slice array
|
||||||
GLMTexLayoutSlice m_slices[0]; // dynamically allocated 2-d array [faces][mips]
|
GLMTexLayoutSlice m_slices[0]; // dynamically allocated 2-d array [faces][mips]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class CGLMTexLayoutTable
|
class CGLMTexLayoutTable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CGLMTexLayoutTable();
|
CGLMTexLayoutTable();
|
||||||
|
|
||||||
GLMTexLayout *NewLayoutRef( GLMTexLayoutKey *key ); // pass in a pointer to layout key - receive ptr to completed layout
|
GLMTexLayout *NewLayoutRef( GLMTexLayoutKey *key ); // pass in a pointer to layout key - receive ptr to completed layout
|
||||||
void DelLayoutRef( GLMTexLayout *layout ); // pass in pointer to completed layout. refcount is dropped.
|
void DelLayoutRef( GLMTexLayout *layout ); // pass in pointer to completed layout. refcount is dropped.
|
||||||
|
|
||||||
void DumpStats( void );
|
void DumpStats( void );
|
||||||
protected:
|
protected:
|
||||||
CUtlMap< GLMTexLayoutKey, GLMTexLayout* > m_layoutMap;
|
CUtlMap< GLMTexLayoutKey, GLMTexLayout* > m_layoutMap;
|
||||||
};
|
};
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
// a sampler specifies desired state for drawing on a given sampler index
|
// a sampler specifies desired state for drawing on a given sampler index
|
||||||
// this is the combination of a texture choice and a set of sampler parameters
|
// this is the combination of a texture choice and a set of sampler parameters
|
||||||
// see http://msdn.microsoft.com/en-us/library/bb172602(VS.85).aspx
|
// see http://msdn.microsoft.com/en-us/library/bb172602(VS.85).aspx
|
||||||
|
|
||||||
|
|
||||||
struct GLMTexSamplingParams
|
struct GLMTexSamplingParams
|
||||||
{
|
{
|
||||||
GLenum m_addressModes[3]; // S, T, R
|
GLenum m_addressModes[3]; // S, T, R
|
||||||
GLfloat m_borderColor[4]; // R,G,B,A
|
GLfloat m_borderColor[4]; // R,G,B,A
|
||||||
|
|
||||||
GLenum m_magFilter;
|
GLenum m_magFilter;
|
||||||
GLenum m_minFilter;
|
GLenum m_minFilter;
|
||||||
|
|
||||||
GLfloat m_mipmapBias;
|
GLfloat m_mipmapBias;
|
||||||
GLint m_minMipLevel;
|
GLint m_minMipLevel;
|
||||||
GLint m_maxMipLevel;
|
GLint m_maxMipLevel;
|
||||||
GLint m_maxAniso;
|
GLint m_maxAniso;
|
||||||
GLenum m_compareMode; // only used for depth and stencil type textures
|
GLenum m_compareMode; // only used for depth and stencil type textures
|
||||||
bool m_srgb; // srgb texture read...
|
bool m_srgb; // srgb texture read...
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GLMTexLockParams
|
struct GLMTexLockParams
|
||||||
{
|
{
|
||||||
// input params which identify the slice of interest
|
// input params which identify the slice of interest
|
||||||
CGLMTex *m_tex;
|
CGLMTex *m_tex;
|
||||||
int m_face;
|
int m_face;
|
||||||
int m_mip;
|
int m_mip;
|
||||||
|
|
||||||
// identifies the region of the slice
|
// identifies the region of the slice
|
||||||
GLMRegion m_region;
|
GLMRegion m_region;
|
||||||
|
|
||||||
// tells GLM to force re-read of the texels back from GL
|
// tells GLM to force re-read of the texels back from GL
|
||||||
// i.e. "I know I stepped on those texels with a draw or blit - the GLM copy is stale"
|
// i.e. "I know I stepped on those texels with a draw or blit - the GLM copy is stale"
|
||||||
bool m_readback;
|
bool m_readback;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GLMTexLockDesc
|
struct GLMTexLockDesc
|
||||||
{
|
{
|
||||||
GLMTexLockParams m_req; // form of the lock request
|
GLMTexLockParams m_req; // form of the lock request
|
||||||
|
|
||||||
bool m_active; // set true at lock time. cleared at unlock time.
|
bool m_active; // set true at lock time. cleared at unlock time.
|
||||||
|
|
||||||
int m_sliceIndex; // which slice in the layout
|
int m_sliceIndex; // which slice in the layout
|
||||||
int m_sliceBaseOffset; // where is that in the texture data
|
int m_sliceBaseOffset; // where is that in the texture data
|
||||||
int m_sliceRegionOffset; // offset to the start (lowest address corner) of the region requested
|
int m_sliceRegionOffset; // offset to the start (lowest address corner) of the region requested
|
||||||
};
|
};
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
#define GLM_SAMPLER_COUNT 16
|
#define GLM_SAMPLER_COUNT 16
|
||||||
|
|
||||||
typedef CBitVec<GLM_SAMPLER_COUNT> CTexBindMask;
|
typedef CBitVec<GLM_SAMPLER_COUNT> CTexBindMask;
|
||||||
|
|
||||||
enum EGLMTexSliceFlag
|
enum EGLMTexSliceFlag
|
||||||
{
|
{
|
||||||
kSliceValid = 0x01, // slice has been teximage'd in whole at least once - set to 0 initially
|
kSliceValid = 0x01, // slice has been teximage'd in whole at least once - set to 0 initially
|
||||||
kSliceStorageValid = 0x02, // if backing store is available, this slice's data is a valid copy - set to 0 initially
|
kSliceStorageValid = 0x02, // if backing store is available, this slice's data is a valid copy - set to 0 initially
|
||||||
kSliceLocked = 0x04, // are one or more locks outstanding on this slice
|
kSliceLocked = 0x04, // are one or more locks outstanding on this slice
|
||||||
kSliceFullyDirty = 0x08, // does the slice need to be fully downloaded at unlock time (disregard dirty rects)
|
kSliceFullyDirty = 0x08, // does the slice need to be fully downloaded at unlock time (disregard dirty rects)
|
||||||
};
|
};
|
||||||
|
|
||||||
class CGLMTex
|
class CGLMTex
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
void Lock( GLMTexLockParams *params, char** addressOut, int* yStrideOut, int *zStrideOut );
|
void Lock( GLMTexLockParams *params, char** addressOut, int* yStrideOut, int *zStrideOut );
|
||||||
void Unlock( GLMTexLockParams *params );
|
void Unlock( GLMTexLockParams *params );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class GLMContext; // only GLMContext can make CGLMTex objects
|
friend class GLMContext; // only GLMContext can make CGLMTex objects
|
||||||
friend class GLMTester;
|
friend class GLMTester;
|
||||||
friend class CGLMFBO;
|
friend class CGLMFBO;
|
||||||
|
|
||||||
friend class IDirect3DDevice9;
|
friend class IDirect3DDevice9;
|
||||||
friend class IDirect3DBaseTexture9;
|
friend class IDirect3DBaseTexture9;
|
||||||
friend class IDirect3DTexture9;
|
friend class IDirect3DTexture9;
|
||||||
friend class IDirect3DSurface9;
|
friend class IDirect3DSurface9;
|
||||||
friend class IDirect3DCubeTexture9;
|
friend class IDirect3DCubeTexture9;
|
||||||
friend class IDirect3DVolumeTexture9;
|
friend class IDirect3DVolumeTexture9;
|
||||||
|
|
||||||
CGLMTex( GLMContext *ctx, GLMTexLayout *layout, GLMTexSamplingParams *sampling, char *debugLabel = NULL );
|
CGLMTex( GLMContext *ctx, GLMTexLayout *layout, GLMTexSamplingParams *sampling, char *debugLabel = NULL );
|
||||||
~CGLMTex( );
|
~CGLMTex( );
|
||||||
|
|
||||||
int CalcSliceIndex( int face, int mip );
|
int CalcSliceIndex( int face, int mip );
|
||||||
void CalcTexelDataOffsetAndStrides( int sliceIndex, int x, int y, int z, int *offsetOut, int *yStrideOut, int *zStrideOut );
|
void CalcTexelDataOffsetAndStrides( int sliceIndex, int x, int y, int z, int *offsetOut, int *yStrideOut, int *zStrideOut );
|
||||||
|
|
||||||
void ApplySamplingParams( GLMTexSamplingParams *params, bool noCheck=FALSE );
|
void ApplySamplingParams( GLMTexSamplingParams *params, bool noCheck=FALSE );
|
||||||
|
|
||||||
void ReadTexels( GLMTexLockDesc *desc, bool readWholeSlice=true );
|
void ReadTexels( GLMTexLockDesc *desc, bool readWholeSlice=true );
|
||||||
void WriteTexels( GLMTexLockDesc *desc, bool writeWholeSlice=true, bool noDataWrite=false );
|
void WriteTexels( GLMTexLockDesc *desc, bool writeWholeSlice=true, bool noDataWrite=false );
|
||||||
// last param lets us send NULL data ptr (only legal with uncompressed formats, beware)
|
// last param lets us send NULL data ptr (only legal with uncompressed formats, beware)
|
||||||
// this helps out ResetSRGB.
|
// this helps out ResetSRGB.
|
||||||
|
|
||||||
void ResetSRGB( bool srgb, bool noDataWrite );
|
void ResetSRGB( bool srgb, bool noDataWrite );
|
||||||
// re-specify texture format to match desired sRGB form
|
// re-specify texture format to match desired sRGB form
|
||||||
// noWrite means send NULL for texel source addresses instead of actual data - ideal for RT's
|
// noWrite means send NULL for texel source addresses instead of actual data - ideal for RT's
|
||||||
|
|
||||||
GLMTexLayout *m_layout; // layout of texture (shared across all tex with same layout)
|
GLMTexLayout *m_layout; // layout of texture (shared across all tex with same layout)
|
||||||
int m_minActiveMip;//index of lowest mip that has been written. used to drive setting of GL_TEXTURE_MAX_LEVEL.
|
int m_minActiveMip;//index of lowest mip that has been written. used to drive setting of GL_TEXTURE_MAX_LEVEL.
|
||||||
int m_maxActiveMip;//index of highest mip that has been written. used to drive setting of GL_TEXTURE_MAX_LEVEL.
|
int m_maxActiveMip;//index of highest mip that has been written. used to drive setting of GL_TEXTURE_MAX_LEVEL.
|
||||||
|
|
||||||
GLMTexSamplingParams m_sampling; // mirror of sampling params currently embodied in the texture
|
GLMTexSamplingParams m_sampling; // mirror of sampling params currently embodied in the texture
|
||||||
// (consult this at draw time, in order to know if changes need to be made)
|
// (consult this at draw time, in order to know if changes need to be made)
|
||||||
|
|
||||||
GLMContext *m_ctx; // link back to parent context
|
GLMContext *m_ctx; // link back to parent context
|
||||||
|
|
||||||
GLuint m_texName; // name of this texture in the context
|
GLuint m_texName; // name of this texture in the context
|
||||||
bool m_texClientStorage; // was CS selecetd for texture
|
bool m_texClientStorage; // was CS selecetd for texture
|
||||||
bool m_texPreloaded; // has it been kicked into VRAM with GLMContext::PreloadTex yet
|
bool m_texPreloaded; // has it been kicked into VRAM with GLMContext::PreloadTex yet
|
||||||
|
|
||||||
GLuint m_rboName; // name of MSAA RBO backing the tex if MSAA enabled (or zero)
|
GLuint m_rboName; // name of MSAA RBO backing the tex if MSAA enabled (or zero)
|
||||||
bool m_rboDirty; // has RBO been drawn on - i.e. needs to be blitted back to texture if texture is going to be sampled from
|
bool m_rboDirty; // has RBO been drawn on - i.e. needs to be blitted back to texture if texture is going to be sampled from
|
||||||
|
|
||||||
CTexBindMask m_bindPoints; // true for each place in the parent ctx where currently
|
CTexBindMask m_bindPoints; // true for each place in the parent ctx where currently
|
||||||
// bound (indexed via EGLMTexCtxBindingIndex)
|
// bound (indexed via EGLMTexCtxBindingIndex)
|
||||||
|
|
||||||
int m_rtAttachCount; // how many RT's have this texture attached somewhere
|
int m_rtAttachCount; // how many RT's have this texture attached somewhere
|
||||||
|
|
||||||
char *m_backing; // backing storage if available
|
char *m_backing; // backing storage if available
|
||||||
|
|
||||||
int m_lockCount; // lock reqs are stored in the GLMContext for tracking
|
int m_lockCount; // lock reqs are stored in the GLMContext for tracking
|
||||||
|
|
||||||
CUtlVector<unsigned char> m_sliceFlags;
|
CUtlVector<unsigned char> m_sliceFlags;
|
||||||
|
|
||||||
char *m_debugLabel; // strdup() of debugLabel passed in, or NULL
|
char *m_debugLabel; // strdup() of debugLabel passed in, or NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,184 +1,184 @@
|
|||||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
// !!! FIXME: Some of these aren't base OpenGL...pick out the extensions.
|
// !!! FIXME: Some of these aren't base OpenGL...pick out the extensions.
|
||||||
// !!! FIXME: Also, look up these -1, -1 versions numbers.
|
// !!! FIXME: Also, look up these -1, -1 versions numbers.
|
||||||
GL_FUNC(OpenGL,true,GLenum,glGetError,(void),())
|
GL_FUNC(OpenGL,true,GLenum,glGetError,(void),())
|
||||||
GL_FUNC_VOID(OpenGL,true,glActiveTexture,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glActiveTexture,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glAlphaFunc,(GLenum a,GLclampf b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glAlphaFunc,(GLenum a,GLclampf b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glAttachObjectARB,(GLhandleARB a,GLhandleARB b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glAttachObjectARB,(GLhandleARB a,GLhandleARB b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glBegin,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glBegin,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glBindAttribLocationARB,(GLhandleARB a,GLuint b,const GLcharARB *c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glBindAttribLocationARB,(GLhandleARB a,GLuint b,const GLcharARB *c),(a,b,c))
|
||||||
GL_FUNC_VOID(OpenGL,true,glBindBufferARB,(GLenum a,GLuint b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glBindBufferARB,(GLenum a,GLuint b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glBindProgramARB,(GLenum a,GLuint b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glBindProgramARB,(GLenum a,GLuint b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glBindTexture,(GLenum a,GLuint b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glBindTexture,(GLenum a,GLuint b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glBlendColor,(GLclampf a,GLclampf b,GLclampf c,GLclampf d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glBlendColor,(GLclampf a,GLclampf b,GLclampf c,GLclampf d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glBlendEquation,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glBlendEquation,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glBlendFunc,(GLenum a,GLenum b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glBlendFunc,(GLenum a,GLenum b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glBufferDataARB,(GLenum a,GLsizeiptrARB b,const GLvoid *c,GLenum d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glBufferDataARB,(GLenum a,GLsizeiptrARB b,const GLvoid *c,GLenum d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glClear,(GLbitfield a),(a))
|
GL_FUNC_VOID(OpenGL,true,glClear,(GLbitfield a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glClearColor,(GLclampf a,GLclampf b,GLclampf c,GLclampf d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glClearColor,(GLclampf a,GLclampf b,GLclampf c,GLclampf d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glClearDepth,(GLclampd a),(a))
|
GL_FUNC_VOID(OpenGL,true,glClearDepth,(GLclampd a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glClearStencil,(GLint a),(a))
|
GL_FUNC_VOID(OpenGL,true,glClearStencil,(GLint a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glClipPlane,(GLenum a,const GLdouble *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glClipPlane,(GLenum a,const GLdouble *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glColorMask,(GLboolean a,GLboolean b,GLboolean c,GLboolean d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glColorMask,(GLboolean a,GLboolean b,GLboolean c,GLboolean d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glCompileShaderARB,(GLhandleARB a),(a))
|
GL_FUNC_VOID(OpenGL,true,glCompileShaderARB,(GLhandleARB a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glCompressedTexImage2D,(GLenum a,GLint b,GLenum c,GLsizei d,GLsizei e,GLint f,GLsizei g,const GLvoid *h),(a,b,c,d,e,f,g,h))
|
GL_FUNC_VOID(OpenGL,true,glCompressedTexImage2D,(GLenum a,GLint b,GLenum c,GLsizei d,GLsizei e,GLint f,GLsizei g,const GLvoid *h),(a,b,c,d,e,f,g,h))
|
||||||
GL_FUNC_VOID(OpenGL,true,glCompressedTexImage3D,(GLenum a,GLint b,GLenum c,GLsizei d,GLsizei e,GLsizei f,GLint g,GLsizei h,const GLvoid *i),(a,b,c,d,e,f,g,h,i))
|
GL_FUNC_VOID(OpenGL,true,glCompressedTexImage3D,(GLenum a,GLint b,GLenum c,GLsizei d,GLsizei e,GLsizei f,GLint g,GLsizei h,const GLvoid *i),(a,b,c,d,e,f,g,h,i))
|
||||||
GL_FUNC(OpenGL,true,GLhandleARB,glCreateProgramObjectARB,(void),())
|
GL_FUNC(OpenGL,true,GLhandleARB,glCreateProgramObjectARB,(void),())
|
||||||
GL_FUNC(OpenGL,true,GLhandleARB,glCreateShaderObjectARB,(GLenum a),(a))
|
GL_FUNC(OpenGL,true,GLhandleARB,glCreateShaderObjectARB,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDeleteBuffersARB,(GLsizei a,const GLuint *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glDeleteBuffersARB,(GLsizei a,const GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDeleteObjectARB,(GLhandleARB a),(a))
|
GL_FUNC_VOID(OpenGL,true,glDeleteObjectARB,(GLhandleARB a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDeleteProgramsARB,(GLsizei a,const GLuint *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glDeleteProgramsARB,(GLsizei a,const GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDeleteQueriesARB,(GLsizei a,const GLuint *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glDeleteQueriesARB,(GLsizei a,const GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDeleteShader,(GLuint a),(a))
|
GL_FUNC_VOID(OpenGL,true,glDeleteShader,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDeleteTextures,(GLsizei a,const GLuint *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glDeleteTextures,(GLsizei a,const GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDepthFunc,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glDepthFunc,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDepthMask,(GLboolean a),(a))
|
GL_FUNC_VOID(OpenGL,true,glDepthMask,(GLboolean a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDepthRange,(GLclampd a,GLclampd b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glDepthRange,(GLclampd a,GLclampd b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDetachObjectARB,(GLhandleARB a,GLhandleARB b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glDetachObjectARB,(GLhandleARB a,GLhandleARB b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDisable,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glDisable,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDisableVertexAttribArray,(GLuint a),(a))
|
GL_FUNC_VOID(OpenGL,true,glDisableVertexAttribArray,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDrawArrays,(GLenum a,GLint b,GLsizei c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glDrawArrays,(GLenum a,GLint b,GLsizei c),(a,b,c))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDrawBuffer,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glDrawBuffer,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDrawRangeElements,(GLenum a,GLuint b,GLuint c,GLsizei d,GLenum e,const GLvoid *f),(a,b,c,d,e,f))
|
GL_FUNC_VOID(OpenGL,true,glDrawRangeElements,(GLenum a,GLuint b,GLuint c,GLsizei d,GLenum e,const GLvoid *f),(a,b,c,d,e,f))
|
||||||
GL_FUNC_VOID(OpenGL,true,glEnable,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glEnable,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glEnableVertexAttribArray,(GLuint a),(a))
|
GL_FUNC_VOID(OpenGL,true,glEnableVertexAttribArray,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glEnd,(void),())
|
GL_FUNC_VOID(OpenGL,true,glEnd,(void),())
|
||||||
GL_FUNC_VOID(OpenGL,true,glFinish,(void),())
|
GL_FUNC_VOID(OpenGL,true,glFinish,(void),())
|
||||||
GL_FUNC_VOID(OpenGL,true,glFlush,(void),())
|
GL_FUNC_VOID(OpenGL,true,glFlush,(void),())
|
||||||
GL_FUNC_VOID(OpenGL,true,glFrontFace,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glFrontFace,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGenBuffersARB,(GLsizei a,GLuint *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glGenBuffersARB,(GLsizei a,GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGenProgramsARB,(GLsizei a,GLuint *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glGenProgramsARB,(GLsizei a,GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGenQueriesARB,(GLsizei a,GLuint *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glGenQueriesARB,(GLsizei a,GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGenTextures,(GLsizei a,GLuint *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glGenTextures,(GLsizei a,GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGetBooleanv,(GLenum a,GLboolean *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glGetBooleanv,(GLenum a,GLboolean *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGetCompressedTexImage,(GLenum a,GLint b,GLvoid *c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glGetCompressedTexImage,(GLenum a,GLint b,GLvoid *c),(a,b,c))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGetDoublev,(GLenum a,GLdouble *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glGetDoublev,(GLenum a,GLdouble *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGetFloatv,(GLenum a,GLfloat *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glGetFloatv,(GLenum a,GLfloat *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGetInfoLogARB,(GLhandleARB a,GLsizei b,GLsizei *c,GLcharARB *d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glGetInfoLogARB,(GLhandleARB a,GLsizei b,GLsizei *c,GLcharARB *d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGetIntegerv,(GLenum a,GLint *b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glGetIntegerv,(GLenum a,GLint *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGetObjectParameterivARB,(GLhandleARB a,GLenum b,GLint *c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glGetObjectParameterivARB,(GLhandleARB a,GLenum b,GLint *c),(a,b,c))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGetProgramivARB,(GLenum a,GLenum b,GLint *c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glGetProgramivARB,(GLenum a,GLenum b,GLint *c),(a,b,c))
|
||||||
GL_FUNC(OpenGL,true,const GLubyte *,glGetString,(GLenum a),(a))
|
GL_FUNC(OpenGL,true,const GLubyte *,glGetString,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGetTexImage,(GLenum a,GLint b,GLenum c,GLenum d,GLvoid *e),(a,b,c,d,e))
|
GL_FUNC_VOID(OpenGL,true,glGetTexImage,(GLenum a,GLint b,GLenum c,GLenum d,GLvoid *e),(a,b,c,d,e))
|
||||||
GL_FUNC(OpenGL,true,GLint,glGetUniformLocationARB,(GLhandleARB a,const GLcharARB *b),(a,b))
|
GL_FUNC(OpenGL,true,GLint,glGetUniformLocationARB,(GLhandleARB a,const GLcharARB *b),(a,b))
|
||||||
GL_FUNC(OpenGL,true,GLboolean,glIsEnabled,(GLenum a),(a))
|
GL_FUNC(OpenGL,true,GLboolean,glIsEnabled,(GLenum a),(a))
|
||||||
GL_FUNC(OpenGL,true,GLboolean,glIsTexture,(GLuint a),(a))
|
GL_FUNC(OpenGL,true,GLboolean,glIsTexture,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glLinkProgramARB,(GLhandleARB a),(a))
|
GL_FUNC_VOID(OpenGL,true,glLinkProgramARB,(GLhandleARB a),(a))
|
||||||
GL_FUNC(OpenGL,true,GLvoid*,glMapBufferARB,(GLenum a,GLenum b),(a,b))
|
GL_FUNC(OpenGL,true,GLvoid*,glMapBufferARB,(GLenum a,GLenum b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glOrtho,(GLdouble a,GLdouble b,GLdouble c,GLdouble d,GLdouble e,GLdouble f),(a,b,c,d,e,f))
|
GL_FUNC_VOID(OpenGL,true,glOrtho,(GLdouble a,GLdouble b,GLdouble c,GLdouble d,GLdouble e,GLdouble f),(a,b,c,d,e,f))
|
||||||
GL_FUNC_VOID(OpenGL,true,glPixelStorei,(GLenum a,GLint b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glPixelStorei,(GLenum a,GLint b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glPolygonMode,(GLenum a,GLenum b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glPolygonMode,(GLenum a,GLenum b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glPolygonOffset,(GLfloat a,GLfloat b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glPolygonOffset,(GLfloat a,GLfloat b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glPopAttrib,(void),())
|
GL_FUNC_VOID(OpenGL,true,glPopAttrib,(void),())
|
||||||
GL_FUNC_VOID(OpenGL,true,glProgramStringARB,(GLenum a,GLenum b,GLsizei c,const GLvoid *d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glProgramStringARB,(GLenum a,GLenum b,GLsizei c,const GLvoid *d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glPushAttrib,(GLbitfield a),(a))
|
GL_FUNC_VOID(OpenGL,true,glPushAttrib,(GLbitfield a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glReadBuffer,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glReadBuffer,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glScissor,(GLint a,GLint b,GLsizei c,GLsizei d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glScissor,(GLint a,GLint b,GLsizei c,GLsizei d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glShaderSourceARB,(GLhandleARB a,GLsizei b,const GLcharARB **c,const GLint *d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glShaderSourceARB,(GLhandleARB a,GLsizei b,const GLcharARB **c,const GLint *d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glStencilFunc,(GLenum a,GLint b,GLuint c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glStencilFunc,(GLenum a,GLint b,GLuint c),(a,b,c))
|
||||||
GL_FUNC_VOID(OpenGL,true,glStencilMask,(GLuint a),(a))
|
GL_FUNC_VOID(OpenGL,true,glStencilMask,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glStencilOp,(GLenum a,GLenum b,GLenum c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glStencilOp,(GLenum a,GLenum b,GLenum c),(a,b,c))
|
||||||
GL_FUNC_VOID(OpenGL,true,glTexCoord2f,(GLfloat a,GLfloat b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glTexCoord2f,(GLfloat a,GLfloat b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glTexImage2D,(GLenum a,GLint b,GLint c,GLsizei d,GLsizei e,GLint f,GLenum g,GLenum h,const GLvoid *i),(a,b,c,d,e,f,g,h,i))
|
GL_FUNC_VOID(OpenGL,true,glTexImage2D,(GLenum a,GLint b,GLint c,GLsizei d,GLsizei e,GLint f,GLenum g,GLenum h,const GLvoid *i),(a,b,c,d,e,f,g,h,i))
|
||||||
GL_FUNC_VOID(OpenGL,true,glTexImage3D,(GLenum a,GLint b,GLint c,GLsizei d,GLsizei e,GLsizei f,GLint g,GLenum h,GLenum i,const GLvoid *j),(a,b,c,d,e,f,g,h,i,j))
|
GL_FUNC_VOID(OpenGL,true,glTexImage3D,(GLenum a,GLint b,GLint c,GLsizei d,GLsizei e,GLsizei f,GLint g,GLenum h,GLenum i,const GLvoid *j),(a,b,c,d,e,f,g,h,i,j))
|
||||||
GL_FUNC_VOID(OpenGL,true,glTexParameterfv,(GLenum a,GLenum b,const GLfloat *c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glTexParameterfv,(GLenum a,GLenum b,const GLfloat *c),(a,b,c))
|
||||||
GL_FUNC_VOID(OpenGL,true,glTexParameteri,(GLenum a,GLenum b,GLint c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glTexParameteri,(GLenum a,GLenum b,GLint c),(a,b,c))
|
||||||
GL_FUNC_VOID(OpenGL,true,glTexSubImage2D,(GLenum a,GLint b,GLint c,GLint d,GLsizei e,GLsizei f,GLenum g,GLenum h,const GLvoid *i),(a,b,c,d,e,f,g,h,i))
|
GL_FUNC_VOID(OpenGL,true,glTexSubImage2D,(GLenum a,GLint b,GLint c,GLint d,GLsizei e,GLsizei f,GLenum g,GLenum h,const GLvoid *i),(a,b,c,d,e,f,g,h,i))
|
||||||
GL_FUNC_VOID(OpenGL,true,glUniform1f,(GLint a,GLfloat b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glUniform1f,(GLint a,GLfloat b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glUniform1i,(GLint a,GLint b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glUniform1i,(GLint a,GLint b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glUniform1iARB,(GLint a,GLint b),(a,b))
|
GL_FUNC_VOID(OpenGL,true,glUniform1iARB,(GLint a,GLint b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glUniform4fv,(GLint a,GLsizei b,const GLfloat *c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glUniform4fv,(GLint a,GLsizei b,const GLfloat *c),(a,b,c))
|
||||||
GL_FUNC(OpenGL,true,GLboolean,glUnmapBuffer,(GLenum a),(a))
|
GL_FUNC(OpenGL,true,GLboolean,glUnmapBuffer,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glUseProgram,(GLuint a),(a))
|
GL_FUNC_VOID(OpenGL,true,glUseProgram,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glVertex3f,(GLfloat a,GLfloat b,GLfloat c),(a,b,c))
|
GL_FUNC_VOID(OpenGL,true,glVertex3f,(GLfloat a,GLfloat b,GLfloat c),(a,b,c))
|
||||||
GL_FUNC_VOID(OpenGL,true,glVertexAttribPointer,(GLuint a,GLint b,GLenum c,GLboolean d,GLsizei e,const GLvoid *f),(a,b,c,d,e,f))
|
GL_FUNC_VOID(OpenGL,true,glVertexAttribPointer,(GLuint a,GLint b,GLenum c,GLboolean d,GLsizei e,const GLvoid *f),(a,b,c,d,e,f))
|
||||||
GL_FUNC_VOID(OpenGL,true,glViewport,(GLint a,GLint b,GLsizei c,GLsizei d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glViewport,(GLint a,GLint b,GLsizei c,GLsizei d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glEnableClientState,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glEnableClientState,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glDisableClientState,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glDisableClientState,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glClientActiveTexture,(GLenum a),(a))
|
GL_FUNC_VOID(OpenGL,true,glClientActiveTexture,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glVertexPointer,(GLint a,GLenum b,GLsizei c,const GLvoid *d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glVertexPointer,(GLint a,GLenum b,GLsizei c,const GLvoid *d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glTexCoordPointer,(GLint a,GLenum b,GLsizei c,const GLvoid *d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glTexCoordPointer,(GLint a,GLenum b,GLsizei c,const GLvoid *d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glProgramEnvParameters4fvEXT,(GLenum a,GLuint b,GLsizei c,const GLfloat *d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glProgramEnvParameters4fvEXT,(GLenum a,GLuint b,GLsizei c,const GLfloat *d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glColor4sv,(const GLshort *a),(a))
|
GL_FUNC_VOID(OpenGL,true,glColor4sv,(const GLshort *a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glStencilOpSeparate,(GLenum a,GLenum b,GLenum c,GLenum d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glStencilOpSeparate,(GLenum a,GLenum b,GLenum c,GLenum d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glStencilFuncSeparate,(GLenum a,GLenum b,GLint c,GLuint d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glStencilFuncSeparate,(GLenum a,GLenum b,GLint c,GLuint d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glGetTexLevelParameteriv,(GLenum a,GLint b,GLenum c,GLint *d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glGetTexLevelParameteriv,(GLenum a,GLint b,GLenum c,GLint *d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(OpenGL,true,glColor4f,(GLfloat a,GLfloat b,GLfloat c,GLfloat d),(a,b,c,d))
|
GL_FUNC_VOID(OpenGL,true,glColor4f,(GLfloat a,GLfloat b,GLfloat c,GLfloat d),(a,b,c,d))
|
||||||
GL_EXT(GL_EXT_framebuffer_object,-1,-1)
|
GL_EXT(GL_EXT_framebuffer_object,-1,-1)
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glBindFramebufferEXT,(GLenum a,GLuint b),(a,b))
|
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glBindFramebufferEXT,(GLenum a,GLuint b),(a,b))
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glBindRenderbufferEXT,(GLenum a,GLuint b),(a,b))
|
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glBindRenderbufferEXT,(GLenum a,GLuint b),(a,b))
|
||||||
GL_FUNC(GL_EXT_framebuffer_object,false,GLenum,glCheckFramebufferStatusEXT,(GLenum a),(a))
|
GL_FUNC(GL_EXT_framebuffer_object,false,GLenum,glCheckFramebufferStatusEXT,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glDeleteRenderbuffersEXT,(GLsizei a,const GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glDeleteRenderbuffersEXT,(GLsizei a,const GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glFramebufferRenderbufferEXT,(GLenum a,GLenum b,GLenum c,GLuint d),(a,b,c,d))
|
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glFramebufferRenderbufferEXT,(GLenum a,GLenum b,GLenum c,GLuint d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glFramebufferTexture2DEXT,(GLenum a,GLenum b,GLenum c,GLuint d,GLint e),(a,b,c,d,e))
|
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glFramebufferTexture2DEXT,(GLenum a,GLenum b,GLenum c,GLuint d,GLint e),(a,b,c,d,e))
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glFramebufferTexture3DEXT,(GLenum a,GLenum b,GLenum c,GLuint d,GLint e,GLint f),(a,b,c,d,e,f))
|
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glFramebufferTexture3DEXT,(GLenum a,GLenum b,GLenum c,GLuint d,GLint e,GLint f),(a,b,c,d,e,f))
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glGenFramebuffersEXT,(GLsizei a,GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glGenFramebuffersEXT,(GLsizei a,GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glGenRenderbuffersEXT,(GLsizei a,GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glGenRenderbuffersEXT,(GLsizei a,GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glDeleteFramebuffersEXT,(GLsizei a,const GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_EXT_framebuffer_object,false,glDeleteFramebuffersEXT,(GLsizei a,const GLuint *b),(a,b))
|
||||||
GL_EXT(GL_EXT_framebuffer_blit,-1,-1)
|
GL_EXT(GL_EXT_framebuffer_blit,-1,-1)
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_blit,false,glBlitFramebufferEXT,(GLint a,GLint b,GLint c,GLint d,GLint e,GLint f,GLint g,GLint h,GLbitfield i,GLenum j),(a,b,c,d,e,f,g,h,i,j))
|
GL_FUNC_VOID(GL_EXT_framebuffer_blit,false,glBlitFramebufferEXT,(GLint a,GLint b,GLint c,GLint d,GLint e,GLint f,GLint g,GLint h,GLbitfield i,GLenum j),(a,b,c,d,e,f,g,h,i,j))
|
||||||
GL_EXT(GL_EXT_framebuffer_multisample,-1,-1)
|
GL_EXT(GL_EXT_framebuffer_multisample,-1,-1)
|
||||||
GL_FUNC_VOID(GL_EXT_framebuffer_multisample,false,glRenderbufferStorageMultisampleEXT,(GLenum a,GLsizei b,GLenum c,GLsizei d,GLsizei e),(a,b,c,d,e))
|
GL_FUNC_VOID(GL_EXT_framebuffer_multisample,false,glRenderbufferStorageMultisampleEXT,(GLenum a,GLsizei b,GLenum c,GLsizei d,GLsizei e),(a,b,c,d,e))
|
||||||
GL_EXT(GL_APPLE_fence,-1,-1)
|
GL_EXT(GL_APPLE_fence,-1,-1)
|
||||||
GL_FUNC(GL_APPLE_fence,false,GLboolean,glTestFenceAPPLE,(GLuint a),(a))
|
GL_FUNC(GL_APPLE_fence,false,GLboolean,glTestFenceAPPLE,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(GL_APPLE_fence,false,glSetFenceAPPLE,(GLuint a),(a))
|
GL_FUNC_VOID(GL_APPLE_fence,false,glSetFenceAPPLE,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(GL_APPLE_fence,false,glFinishFenceAPPLE,(GLuint a),(a))
|
GL_FUNC_VOID(GL_APPLE_fence,false,glFinishFenceAPPLE,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(GL_APPLE_fence,false,glDeleteFencesAPPLE,(GLsizei a,const GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_APPLE_fence,false,glDeleteFencesAPPLE,(GLsizei a,const GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(GL_APPLE_fence,false,glGenFencesAPPLE,(GLsizei a,GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_APPLE_fence,false,glGenFencesAPPLE,(GLsizei a,GLuint *b),(a,b))
|
||||||
GL_EXT(GL_NV_fence,-1,-1)
|
GL_EXT(GL_NV_fence,-1,-1)
|
||||||
GL_FUNC(GL_NV_fence,false,GLboolean,glTestFenceNV,(GLuint a),(a))
|
GL_FUNC(GL_NV_fence,false,GLboolean,glTestFenceNV,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(GL_NV_fence,false,glSetFenceNV,(GLuint a,GLenum b),(a,b))
|
GL_FUNC_VOID(GL_NV_fence,false,glSetFenceNV,(GLuint a,GLenum b),(a,b))
|
||||||
GL_FUNC_VOID(GL_NV_fence,false,glFinishFenceNV,(GLuint a),(a))
|
GL_FUNC_VOID(GL_NV_fence,false,glFinishFenceNV,(GLuint a),(a))
|
||||||
GL_FUNC_VOID(GL_NV_fence,false,glDeleteFencesNV,(GLsizei a,const GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_NV_fence,false,glDeleteFencesNV,(GLsizei a,const GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(GL_NV_fence,false,glGenFencesNV,(GLsizei a,GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_NV_fence,false,glGenFencesNV,(GLsizei a,GLuint *b),(a,b))
|
||||||
GL_EXT(GL_ARB_sync,3,2)
|
GL_EXT(GL_ARB_sync,3,2)
|
||||||
#ifdef HAVE_GL_ARB_SYNC
|
#ifdef HAVE_GL_ARB_SYNC
|
||||||
GL_FUNC_VOID(GL_ARB_sync,false,glGetSynciv,(GLsync a, GLenum b, GLsizei c, GLsizei *d, GLint *e),(a,b,c,d,e))
|
GL_FUNC_VOID(GL_ARB_sync,false,glGetSynciv,(GLsync a, GLenum b, GLsizei c, GLsizei *d, GLint *e),(a,b,c,d,e))
|
||||||
GL_FUNC(GL_ARB_sync,false,GLenum,glClientWaitSync,(GLsync a, GLbitfield b, GLuint64 c),(a,b,c))
|
GL_FUNC(GL_ARB_sync,false,GLenum,glClientWaitSync,(GLsync a, GLbitfield b, GLuint64 c),(a,b,c))
|
||||||
GL_FUNC_VOID(GL_ARB_sync,false,glWaitSync,(GLsync a, GLbitfield b, GLuint64 c),(a,b,c))
|
GL_FUNC_VOID(GL_ARB_sync,false,glWaitSync,(GLsync a, GLbitfield b, GLuint64 c),(a,b,c))
|
||||||
GL_FUNC_VOID(GL_ARB_sync,false,glDeleteSync,(GLsync a),(a))
|
GL_FUNC_VOID(GL_ARB_sync,false,glDeleteSync,(GLsync a),(a))
|
||||||
GL_FUNC(GL_ARB_sync,false,GLsync,glFenceSync,(GLenum a, GLbitfield b),(a,b))
|
GL_FUNC(GL_ARB_sync,false,GLsync,glFenceSync,(GLenum a, GLbitfield b),(a,b))
|
||||||
#endif
|
#endif
|
||||||
GL_EXT(GL_EXT_draw_buffers2,-1,-1)
|
GL_EXT(GL_EXT_draw_buffers2,-1,-1)
|
||||||
GL_FUNC_VOID(GL_EXT_draw_buffers2,false,glColorMaskIndexedEXT,(GLuint a,GLboolean b,GLboolean c,GLboolean d,GLboolean e),(a,b,c,d,e))
|
GL_FUNC_VOID(GL_EXT_draw_buffers2,false,glColorMaskIndexedEXT,(GLuint a,GLboolean b,GLboolean c,GLboolean d,GLboolean e),(a,b,c,d,e))
|
||||||
GL_FUNC_VOID(GL_EXT_draw_buffers2,false,glEnableIndexedEXT,(GLenum a,GLuint b),(a,b))
|
GL_FUNC_VOID(GL_EXT_draw_buffers2,false,glEnableIndexedEXT,(GLenum a,GLuint b),(a,b))
|
||||||
GL_FUNC_VOID(GL_EXT_draw_buffers2,false,glDisableIndexedEXT,(GLenum a,GLuint b),(a,b))
|
GL_FUNC_VOID(GL_EXT_draw_buffers2,false,glDisableIndexedEXT,(GLenum a,GLuint b),(a,b))
|
||||||
GL_FUNC_VOID(GL_EXT_draw_buffers2,false,glGetBooleanIndexedvEXT,(GLenum a,GLuint b,GLboolean *c),(a,b,c))
|
GL_FUNC_VOID(GL_EXT_draw_buffers2,false,glGetBooleanIndexedvEXT,(GLenum a,GLuint b,GLboolean *c),(a,b,c))
|
||||||
GL_EXT(GL_EXT_bindable_uniform,-1,-1)
|
GL_EXT(GL_EXT_bindable_uniform,-1,-1)
|
||||||
GL_FUNC_VOID(GL_EXT_bindable_uniform,false,glUniformBufferEXT,(GLuint a,GLint b,GLuint c),(a,b,c))
|
GL_FUNC_VOID(GL_EXT_bindable_uniform,false,glUniformBufferEXT,(GLuint a,GLint b,GLuint c),(a,b,c))
|
||||||
GL_EXT(GL_APPLE_flush_buffer_range,-1,-1)
|
GL_EXT(GL_APPLE_flush_buffer_range,-1,-1)
|
||||||
GL_FUNC_VOID(GL_APPLE_flush_buffer_range,false,glBufferParameteriAPPLE,(GLenum a,GLenum b,GLint c),(a,b,c))
|
GL_FUNC_VOID(GL_APPLE_flush_buffer_range,false,glBufferParameteriAPPLE,(GLenum a,GLenum b,GLint c),(a,b,c))
|
||||||
GL_FUNC_VOID(GL_APPLE_flush_buffer_range,false,glFlushMappedBufferRangeAPPLE,(GLenum a,GLintptr b,GLsizeiptr c),(a,b,c))
|
GL_FUNC_VOID(GL_APPLE_flush_buffer_range,false,glFlushMappedBufferRangeAPPLE,(GLenum a,GLintptr b,GLsizeiptr c),(a,b,c))
|
||||||
GL_EXT(GL_ARB_map_buffer_range,-1,-1)
|
GL_EXT(GL_ARB_map_buffer_range,-1,-1)
|
||||||
GL_FUNC(GL_ARB_map_buffer_range,false,void*,glMapBufferRange,(GLenum a,GLintptr b,GLsizeiptr c,GLbitfield d),(a,b,c,d))
|
GL_FUNC(GL_ARB_map_buffer_range,false,void*,glMapBufferRange,(GLenum a,GLintptr b,GLsizeiptr c,GLbitfield d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(GL_ARB_map_buffer_range,false,glFlushMappedBufferRange,(GLenum a,GLintptr b,GLsizeiptr c),(a,b,c))
|
GL_FUNC_VOID(GL_ARB_map_buffer_range,false,glFlushMappedBufferRange,(GLenum a,GLintptr b,GLsizeiptr c),(a,b,c))
|
||||||
GL_EXT(GL_ARB_occlusion_query,-1,-1)
|
GL_EXT(GL_ARB_occlusion_query,-1,-1)
|
||||||
GL_FUNC_VOID(GL_ARB_occlusion_query,false,glBeginQueryARB,(GLenum a,GLuint b),(a,b))
|
GL_FUNC_VOID(GL_ARB_occlusion_query,false,glBeginQueryARB,(GLenum a,GLuint b),(a,b))
|
||||||
GL_FUNC_VOID(GL_ARB_occlusion_query,false,glEndQueryARB,(GLenum a),(a))
|
GL_FUNC_VOID(GL_ARB_occlusion_query,false,glEndQueryARB,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(GL_ARB_occlusion_query,false,glGetQueryObjectivARB,(GLuint a,GLenum b,GLint *c),(a,b,c))
|
GL_FUNC_VOID(GL_ARB_occlusion_query,false,glGetQueryObjectivARB,(GLuint a,GLenum b,GLint *c),(a,b,c))
|
||||||
GL_FUNC_VOID(GL_ARB_occlusion_query,false,glGetQueryObjectuivARB,(GLuint a,GLenum b,GLuint *c),(a,b,c))
|
GL_FUNC_VOID(GL_ARB_occlusion_query,false,glGetQueryObjectuivARB,(GLuint a,GLenum b,GLuint *c),(a,b,c))
|
||||||
GL_EXT(GL_APPLE_texture_range,-1,-1)
|
GL_EXT(GL_APPLE_texture_range,-1,-1)
|
||||||
GL_FUNC_VOID(GL_APPLE_texture_range,false,glTextureRangeAPPLE,(GLenum a,GLsizei b,void *c),(a,b,c))
|
GL_FUNC_VOID(GL_APPLE_texture_range,false,glTextureRangeAPPLE,(GLenum a,GLsizei b,void *c),(a,b,c))
|
||||||
GL_FUNC_VOID(GL_APPLE_texture_range,false,glGetTexParameterPointervAPPLE,(GLenum a,GLenum b,void* *c),(a,b,c))
|
GL_FUNC_VOID(GL_APPLE_texture_range,false,glGetTexParameterPointervAPPLE,(GLenum a,GLenum b,void* *c),(a,b,c))
|
||||||
GL_EXT(GL_APPLE_client_storage,-1,-1)
|
GL_EXT(GL_APPLE_client_storage,-1,-1)
|
||||||
GL_EXT(GL_ARB_uniform_buffer,-1,-1)
|
GL_EXT(GL_ARB_uniform_buffer,-1,-1)
|
||||||
GL_EXT(GL_ARB_vertex_array_bgra,-1,-1)
|
GL_EXT(GL_ARB_vertex_array_bgra,-1,-1)
|
||||||
GL_EXT(GL_EXT_vertex_array_bgra,-1,-1)
|
GL_EXT(GL_EXT_vertex_array_bgra,-1,-1)
|
||||||
GL_EXT(GL_ARB_framebuffer_object,3,0)
|
GL_EXT(GL_ARB_framebuffer_object,3,0)
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glBindFramebuffer,(GLenum a,GLuint b),(a,b))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glBindFramebuffer,(GLenum a,GLuint b),(a,b))
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glBindRenderbuffer,(GLenum a,GLuint b),(a,b))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glBindRenderbuffer,(GLenum a,GLuint b),(a,b))
|
||||||
GL_FUNC(GL_ARB_framebuffer_object,false,GLenum,glCheckFramebufferStatus,(GLenum a),(a))
|
GL_FUNC(GL_ARB_framebuffer_object,false,GLenum,glCheckFramebufferStatus,(GLenum a),(a))
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glDeleteRenderbuffers,(GLsizei a,const GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glDeleteRenderbuffers,(GLsizei a,const GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glFramebufferRenderbuffer,(GLenum a,GLenum b,GLenum c,GLuint d),(a,b,c,d))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glFramebufferRenderbuffer,(GLenum a,GLenum b,GLenum c,GLuint d),(a,b,c,d))
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glFramebufferTexture2D,(GLenum a,GLenum b,GLenum c,GLuint d,GLint e),(a,b,c,d,e))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glFramebufferTexture2D,(GLenum a,GLenum b,GLenum c,GLuint d,GLint e),(a,b,c,d,e))
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glFramebufferTexture3D,(GLenum a,GLenum b,GLenum c,GLuint d,GLint e,GLint f),(a,b,c,d,e,f))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glFramebufferTexture3D,(GLenum a,GLenum b,GLenum c,GLuint d,GLint e,GLint f),(a,b,c,d,e,f))
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glGenFramebuffers,(GLsizei a,GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glGenFramebuffers,(GLsizei a,GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glGenRenderbuffers,(GLsizei a,GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glGenRenderbuffers,(GLsizei a,GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glDeleteFramebuffers,(GLsizei a,const GLuint *b),(a,b))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glDeleteFramebuffers,(GLsizei a,const GLuint *b),(a,b))
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glBlitFramebuffer,(GLint a,GLint b,GLint c,GLint d,GLint e,GLint f,GLint g,GLint h,GLbitfield i,GLenum j),(a,b,c,d,e,f,g,h,i,j))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glBlitFramebuffer,(GLint a,GLint b,GLint c,GLint d,GLint e,GLint f,GLint g,GLint h,GLbitfield i,GLenum j),(a,b,c,d,e,f,g,h,i,j))
|
||||||
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glRenderbufferStorageMultisample,(GLenum a,GLsizei b,GLenum c,GLsizei d,GLsizei e),(a,b,c,d,e))
|
GL_FUNC_VOID(GL_ARB_framebuffer_object,false,glRenderbufferStorageMultisample,(GLenum a,GLsizei b,GLenum c,GLsizei d,GLsizei e),(a,b,c,d,e))
|
||||||
GL_EXT(GL_GREMEDY_string_marker,-1,-1)
|
GL_EXT(GL_GREMEDY_string_marker,-1,-1)
|
||||||
GL_FUNC_VOID(GL_GREMEDY_string_marker,false,glStringMarkerGREMEDY,(GLsizei a,const void *b),(a,b))
|
GL_FUNC_VOID(GL_GREMEDY_string_marker,false,glStringMarkerGREMEDY,(GLsizei a,const void *b),(a,b))
|
||||||
GL_FUNC_VOID(OpenGL,true,glPushClientAttrib,(GLbitfield a),(a))
|
GL_FUNC_VOID(OpenGL,true,glPushClientAttrib,(GLbitfield a),(a))
|
||||||
GL_FUNC_VOID(OpenGL,true,glPopClientAttrib,(void),())
|
GL_FUNC_VOID(OpenGL,true,glPopClientAttrib,(void),())
|
||||||
|
|
||||||
|
@ -1,177 +1,177 @@
|
|||||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
//
|
//
|
||||||
// glmdisplay.h
|
// glmdisplay.h
|
||||||
// display related stuff - used by both GLMgr and the CocoaMgr
|
// display related stuff - used by both GLMgr and the CocoaMgr
|
||||||
//
|
//
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
#ifndef GLMDISPLAY_H
|
#ifndef GLMDISPLAY_H
|
||||||
#define GLMDISPLAY_H
|
#define GLMDISPLAY_H
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifdef OSX
|
#ifdef OSX
|
||||||
#include <OpenGL/OpenGL.h>
|
#include <OpenGL/OpenGL.h>
|
||||||
#include <OpenGL/gl.h>
|
#include <OpenGL/gl.h>
|
||||||
#include <OpenGL/glext.h>
|
#include <OpenGL/glext.h>
|
||||||
#include <OpenGL/CGLTypes.h>
|
#include <OpenGL/CGLTypes.h>
|
||||||
#include <OpenGL/CGLRenderers.h>
|
#include <OpenGL/CGLRenderers.h>
|
||||||
#include <OpenGL/CGLCurrent.h>
|
#include <OpenGL/CGLCurrent.h>
|
||||||
|
|
||||||
typedef uint32_t CGDirectDisplayID;
|
typedef uint32_t CGDirectDisplayID;
|
||||||
typedef uint32_t CGOpenGLDisplayMask;
|
typedef uint32_t CGOpenGLDisplayMask;
|
||||||
typedef double CGRefreshRate;
|
typedef double CGRefreshRate;
|
||||||
|
|
||||||
//#include <ApplicationServices/ApplicationServices.h>
|
//#include <ApplicationServices/ApplicationServices.h>
|
||||||
#elif defined(LINUX)
|
#elif defined(LINUX)
|
||||||
#include "tier0/platform.h"
|
#include "tier0/platform.h"
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
#include <GL/glext.h>
|
#include <GL/glext.h>
|
||||||
#else
|
#else
|
||||||
#error
|
#error
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef void _PseudoNSGLContext; // aka NSOpenGLContext
|
typedef void _PseudoNSGLContext; // aka NSOpenGLContext
|
||||||
typedef _PseudoNSGLContext *PseudoNSGLContextPtr;
|
typedef _PseudoNSGLContext *PseudoNSGLContextPtr;
|
||||||
|
|
||||||
struct GLMDisplayModeInfoFields
|
struct GLMDisplayModeInfoFields
|
||||||
{
|
{
|
||||||
uint m_modePixelWidth;
|
uint m_modePixelWidth;
|
||||||
uint m_modePixelHeight;
|
uint m_modePixelHeight;
|
||||||
uint m_modeRefreshHz;
|
uint m_modeRefreshHz;
|
||||||
// are we even going to talk about bit depth... not yet
|
// are we even going to talk about bit depth... not yet
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GLMDisplayInfoFields
|
struct GLMDisplayInfoFields
|
||||||
{
|
{
|
||||||
#ifdef OSX
|
#ifdef OSX
|
||||||
CGDirectDisplayID m_cgDisplayID;
|
CGDirectDisplayID m_cgDisplayID;
|
||||||
CGOpenGLDisplayMask m_glDisplayMask; // result of CGDisplayIDToOpenGLDisplayMask on the cg_displayID.
|
CGOpenGLDisplayMask m_glDisplayMask; // result of CGDisplayIDToOpenGLDisplayMask on the cg_displayID.
|
||||||
#endif
|
#endif
|
||||||
uint m_displayPixelWidth;
|
uint m_displayPixelWidth;
|
||||||
uint m_displayPixelHeight;
|
uint m_displayPixelHeight;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GLMRendererInfoFields
|
struct GLMRendererInfoFields
|
||||||
{
|
{
|
||||||
/*properties of interest and their desired values.
|
/*properties of interest and their desired values.
|
||||||
|
|
||||||
kCGLRPFullScreen = 54, true
|
kCGLRPFullScreen = 54, true
|
||||||
kCGLRPAccelerated = 73, true
|
kCGLRPAccelerated = 73, true
|
||||||
kCGLRPWindow = 80, true
|
kCGLRPWindow = 80, true
|
||||||
|
|
||||||
kCGLRPRendererID = 70, informational
|
kCGLRPRendererID = 70, informational
|
||||||
kCGLRPDisplayMask = 84, informational
|
kCGLRPDisplayMask = 84, informational
|
||||||
kCGLRPBufferModes = 100, informational
|
kCGLRPBufferModes = 100, informational
|
||||||
kCGLRPColorModes = 103, informational
|
kCGLRPColorModes = 103, informational
|
||||||
kCGLRPAccumModes = 104, informational
|
kCGLRPAccumModes = 104, informational
|
||||||
kCGLRPDepthModes = 105, informational
|
kCGLRPDepthModes = 105, informational
|
||||||
kCGLRPStencilModes = 106, informational
|
kCGLRPStencilModes = 106, informational
|
||||||
kCGLRPMaxAuxBuffers = 107, informational
|
kCGLRPMaxAuxBuffers = 107, informational
|
||||||
kCGLRPMaxSampleBuffers = 108, informational
|
kCGLRPMaxSampleBuffers = 108, informational
|
||||||
kCGLRPMaxSamples = 109, informational
|
kCGLRPMaxSamples = 109, informational
|
||||||
kCGLRPSampleModes = 110, informational
|
kCGLRPSampleModes = 110, informational
|
||||||
kCGLRPSampleAlpha = 111, informational
|
kCGLRPSampleAlpha = 111, informational
|
||||||
kCGLRPVideoMemory = 120, informational
|
kCGLRPVideoMemory = 120, informational
|
||||||
kCGLRPTextureMemory = 121, informational
|
kCGLRPTextureMemory = 121, informational
|
||||||
kCGLRPRendererCount = 128 number of renderers in the CGLRendererInfoObj under examination
|
kCGLRPRendererCount = 128 number of renderers in the CGLRendererInfoObj under examination
|
||||||
|
|
||||||
kCGLRPOffScreen = 53, D/C
|
kCGLRPOffScreen = 53, D/C
|
||||||
kCGLRPRobust = 75, FALSE or D/C - aka we're asking for no-fallback
|
kCGLRPRobust = 75, FALSE or D/C - aka we're asking for no-fallback
|
||||||
kCGLRPBackingStore = 76, D/C
|
kCGLRPBackingStore = 76, D/C
|
||||||
kCGLRPMPSafe = 78, D/C
|
kCGLRPMPSafe = 78, D/C
|
||||||
kCGLRPMultiScreen = 81, D/C
|
kCGLRPMultiScreen = 81, D/C
|
||||||
kCGLRPCompliant = 83, D/C
|
kCGLRPCompliant = 83, D/C
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
//--------------------------- info we have from CGL renderer queries, IOKit, Gestalt
|
//--------------------------- info we have from CGL renderer queries, IOKit, Gestalt
|
||||||
//--------------------------- these are set up in the displayDB by CocoaMgr
|
//--------------------------- these are set up in the displayDB by CocoaMgr
|
||||||
GLint m_fullscreen;
|
GLint m_fullscreen;
|
||||||
GLint m_accelerated;
|
GLint m_accelerated;
|
||||||
GLint m_windowed;
|
GLint m_windowed;
|
||||||
|
|
||||||
GLint m_rendererID;
|
GLint m_rendererID;
|
||||||
GLint m_displayMask;
|
GLint m_displayMask;
|
||||||
GLint m_bufferModes;
|
GLint m_bufferModes;
|
||||||
GLint m_colorModes;
|
GLint m_colorModes;
|
||||||
GLint m_accumModes;
|
GLint m_accumModes;
|
||||||
GLint m_depthModes;
|
GLint m_depthModes;
|
||||||
GLint m_stencilModes;
|
GLint m_stencilModes;
|
||||||
|
|
||||||
GLint m_maxAuxBuffers;
|
GLint m_maxAuxBuffers;
|
||||||
GLint m_maxSampleBuffers;
|
GLint m_maxSampleBuffers;
|
||||||
GLint m_maxSamples;
|
GLint m_maxSamples;
|
||||||
GLint m_sampleModes;
|
GLint m_sampleModes;
|
||||||
GLint m_sampleAlpha;
|
GLint m_sampleAlpha;
|
||||||
|
|
||||||
GLint m_vidMemory;
|
GLint m_vidMemory;
|
||||||
GLint m_texMemory;
|
GLint m_texMemory;
|
||||||
|
|
||||||
uint m_pciVendorID;
|
uint m_pciVendorID;
|
||||||
uint m_pciDeviceID;
|
uint m_pciDeviceID;
|
||||||
char m_pciModelString[64];
|
char m_pciModelString[64];
|
||||||
char m_driverInfoString[64];
|
char m_driverInfoString[64];
|
||||||
|
|
||||||
//--------------------------- OS version related - set up by CocoaMgr
|
//--------------------------- OS version related - set up by CocoaMgr
|
||||||
|
|
||||||
// OS version found
|
// OS version found
|
||||||
uint m_osComboVersion; // 0x00XXYYZZ : XX major, YY minor, ZZ minor minor : 10.6.3 --> 0x000A0603. 10.5.8 --> 0x000A0508.
|
uint m_osComboVersion; // 0x00XXYYZZ : XX major, YY minor, ZZ minor minor : 10.6.3 --> 0x000A0603. 10.5.8 --> 0x000A0508.
|
||||||
|
|
||||||
//--------------------------- shorthands - also set up by CocoaMgr - driven by vendorid / deviceid
|
//--------------------------- shorthands - also set up by CocoaMgr - driven by vendorid / deviceid
|
||||||
|
|
||||||
bool m_ati;
|
bool m_ati;
|
||||||
bool m_atiR5xx;
|
bool m_atiR5xx;
|
||||||
bool m_atiR6xx;
|
bool m_atiR6xx;
|
||||||
bool m_atiR7xx;
|
bool m_atiR7xx;
|
||||||
bool m_atiR8xx;
|
bool m_atiR8xx;
|
||||||
bool m_atiNewer;
|
bool m_atiNewer;
|
||||||
|
|
||||||
bool m_intel;
|
bool m_intel;
|
||||||
bool m_intel95x;
|
bool m_intel95x;
|
||||||
bool m_intel3100;
|
bool m_intel3100;
|
||||||
bool m_intelNewer;
|
bool m_intelNewer;
|
||||||
|
|
||||||
bool m_nv;
|
bool m_nv;
|
||||||
bool m_nvG7x;
|
bool m_nvG7x;
|
||||||
bool m_nvG8x;
|
bool m_nvG8x;
|
||||||
bool m_nvNewer;
|
bool m_nvNewer;
|
||||||
|
|
||||||
//--------------------------- context query results - left blank in the display DB - but valid in a GLMContext (call ctx->Caps() to get a const ref)
|
//--------------------------- context query results - left blank in the display DB - but valid in a GLMContext (call ctx->Caps() to get a const ref)
|
||||||
|
|
||||||
// booleans
|
// booleans
|
||||||
bool m_hasGammaWrites; // aka glGetBooleanv(GL_FRAMEBUFFER_SRGB_CAPABLE_EXT) / glEnable(GL_FRAMEBUFFER_SRGB_EXT)
|
bool m_hasGammaWrites; // aka glGetBooleanv(GL_FRAMEBUFFER_SRGB_CAPABLE_EXT) / glEnable(GL_FRAMEBUFFER_SRGB_EXT)
|
||||||
bool m_hasMixedAttachmentSizes; // aka ARB_fbo in 10.6.3 - test for min OS vers, then exported ext string
|
bool m_hasMixedAttachmentSizes; // aka ARB_fbo in 10.6.3 - test for min OS vers, then exported ext string
|
||||||
bool m_hasBGRA; // aka GL_BGRA vertex attribs in 10.6.3 - - test for min OS vers, then exported ext string
|
bool m_hasBGRA; // aka GL_BGRA vertex attribs in 10.6.3 - - test for min OS vers, then exported ext string
|
||||||
bool m_hasNewFullscreenMode; // aka 10.6.x "big window" fullscreen mode
|
bool m_hasNewFullscreenMode; // aka 10.6.x "big window" fullscreen mode
|
||||||
bool m_hasNativeClipVertexMode; // aka GLSL gl_ClipVertex does not fall back to SW- OS version and folklore-based
|
bool m_hasNativeClipVertexMode; // aka GLSL gl_ClipVertex does not fall back to SW- OS version and folklore-based
|
||||||
bool m_hasOcclusionQuery; // occlusion query: do you speak it ?!
|
bool m_hasOcclusionQuery; // occlusion query: do you speak it ?!
|
||||||
bool m_hasFramebufferBlit; // framebuffer blit: know what I'm sayin?!
|
bool m_hasFramebufferBlit; // framebuffer blit: know what I'm sayin?!
|
||||||
bool m_hasPerfPackage1; // means new MTGL, fast OQ, fast uniform upload, NV can resolve flipped (late summer 2010 post 10.6.4 update)
|
bool m_hasPerfPackage1; // means new MTGL, fast OQ, fast uniform upload, NV can resolve flipped (late summer 2010 post 10.6.4 update)
|
||||||
|
|
||||||
// counts
|
// counts
|
||||||
int m_maxAniso; // aniso limit - context query
|
int m_maxAniso; // aniso limit - context query
|
||||||
|
|
||||||
// other exts
|
// other exts
|
||||||
bool m_hasBindableUniforms;
|
bool m_hasBindableUniforms;
|
||||||
bool m_hasUniformBuffers;
|
bool m_hasUniformBuffers;
|
||||||
|
|
||||||
// runtime options that aren't negotiable once set
|
// runtime options that aren't negotiable once set
|
||||||
bool m_hasDualShaders; // must supply CLI arg "-glmdualshaders" or we go GLSL only
|
bool m_hasDualShaders; // must supply CLI arg "-glmdualshaders" or we go GLSL only
|
||||||
|
|
||||||
//--------------------------- " can'ts " - specific problems that need to be worked around
|
//--------------------------- " can'ts " - specific problems that need to be worked around
|
||||||
|
|
||||||
bool m_cantBlitReliably; // Intel chipsets have problems blitting sRGB sometimes
|
bool m_cantBlitReliably; // Intel chipsets have problems blitting sRGB sometimes
|
||||||
bool m_cantAttachSRGB; // NV G8x on 10.5.8 can't have srgb tex on FBO color - separate issue from hasGammaWrites
|
bool m_cantAttachSRGB; // NV G8x on 10.5.8 can't have srgb tex on FBO color - separate issue from hasGammaWrites
|
||||||
bool m_cantResolveFlipped; // happens on NV in 10.6.4 and prior - console variable "gl_can_resolve_flipped" can overrule
|
bool m_cantResolveFlipped; // happens on NV in 10.6.4 and prior - console variable "gl_can_resolve_flipped" can overrule
|
||||||
bool m_cantResolveScaled; // happens everywhere per GL spec but may be relaxed some day - console variable "gl_can_resolve_scaled" can overrule
|
bool m_cantResolveScaled; // happens everywhere per GL spec but may be relaxed some day - console variable "gl_can_resolve_scaled" can overrule
|
||||||
bool m_costlyGammaFlips; // this means that sRGB sampling state affects shader code gen, resulting in state-dependent code regen
|
bool m_costlyGammaFlips; // this means that sRGB sampling state affects shader code gen, resulting in state-dependent code regen
|
||||||
|
|
||||||
|
|
||||||
//--------------------------- " bads " - known bad drivers
|
//--------------------------- " bads " - known bad drivers
|
||||||
bool m_badDriver1064NV; // this is the bad NVIDIA driver on 10.6.4 - stutter, tex corruption, black screen issues
|
bool m_badDriver1064NV; // this is the bad NVIDIA driver on 10.6.4 - stutter, tex corruption, black screen issues
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,299 +1,299 @@
|
|||||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
//
|
//
|
||||||
// glmgrbasics.h
|
// glmgrbasics.h
|
||||||
// types, common headers, forward declarations, utilities
|
// types, common headers, forward declarations, utilities
|
||||||
//
|
//
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
#ifndef GLMBASICS_H
|
#ifndef GLMBASICS_H
|
||||||
#define GLMBASICS_H
|
#define GLMBASICS_H
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifdef OSX
|
#ifdef OSX
|
||||||
#include <OpenGL/OpenGL.h>
|
#include <OpenGL/OpenGL.h>
|
||||||
#include <OpenGL/gl.h>
|
#include <OpenGL/gl.h>
|
||||||
#include <OpenGL/glext.h>
|
#include <OpenGL/glext.h>
|
||||||
#include <OpenGL/CGLTypes.h>
|
#include <OpenGL/CGLTypes.h>
|
||||||
#include <OpenGL/CGLRenderers.h>
|
#include <OpenGL/CGLRenderers.h>
|
||||||
#include <OpenGL/CGLCurrent.h>
|
#include <OpenGL/CGLCurrent.h>
|
||||||
#include <OpenGL/CGLProfiler.h>
|
#include <OpenGL/CGLProfiler.h>
|
||||||
//#include <ApplicationServices/ApplicationServices.h>
|
//#include <ApplicationServices/ApplicationServices.h>
|
||||||
#elif defined(LINUX)
|
#elif defined(LINUX)
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
#include <GL/glext.h>
|
#include <GL/glext.h>
|
||||||
#else
|
#else
|
||||||
#error
|
#error
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "tier0/platform.h"
|
#include "tier0/platform.h"
|
||||||
|
|
||||||
#include "bitmap/imageformat.h"
|
#include "bitmap/imageformat.h"
|
||||||
#include "bitvec.h"
|
#include "bitvec.h"
|
||||||
#include "tier1/checksum_md5.h"
|
#include "tier1/checksum_md5.h"
|
||||||
#include "tier1/utlvector.h"
|
#include "tier1/utlvector.h"
|
||||||
#include "tier1/convar.h"
|
#include "tier1/convar.h"
|
||||||
|
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#include "dxabstract_types.h"
|
#include "dxabstract_types.h"
|
||||||
|
|
||||||
// types
|
// types
|
||||||
struct GLMRect;
|
struct GLMRect;
|
||||||
typedef void *PseudoGLContextPtr;
|
typedef void *PseudoGLContextPtr;
|
||||||
|
|
||||||
|
|
||||||
// 3-d integer box (used for texture lock/unlock etc)
|
// 3-d integer box (used for texture lock/unlock etc)
|
||||||
struct GLMRegion
|
struct GLMRegion
|
||||||
{
|
{
|
||||||
int xmin,xmax;
|
int xmin,xmax;
|
||||||
int ymin,ymax;
|
int ymin,ymax;
|
||||||
int zmin,zmax;
|
int zmin,zmax;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GLMRect // follows GL convention - if coming from the D3D rect you will need to fiddle the Y's
|
struct GLMRect // follows GL convention - if coming from the D3D rect you will need to fiddle the Y's
|
||||||
{
|
{
|
||||||
int xmin; // left
|
int xmin; // left
|
||||||
int ymin; // bottom
|
int ymin; // bottom
|
||||||
int xmax; // right
|
int xmax; // right
|
||||||
int ymax; // top
|
int ymax; // top
|
||||||
};
|
};
|
||||||
|
|
||||||
// macros
|
// macros
|
||||||
|
|
||||||
//#define GLMassert(x) assert(x)
|
//#define GLMassert(x) assert(x)
|
||||||
|
|
||||||
// forward decls
|
// forward decls
|
||||||
class GLMgr; // singleton
|
class GLMgr; // singleton
|
||||||
class GLMContext; // GL context
|
class GLMContext; // GL context
|
||||||
class CGLMContextTester; // testing class
|
class CGLMContextTester; // testing class
|
||||||
class CGLMTex;
|
class CGLMTex;
|
||||||
class CGLMFBO;
|
class CGLMFBO;
|
||||||
class CGLMProgram;
|
class CGLMProgram;
|
||||||
class CGLMBuffer;
|
class CGLMBuffer;
|
||||||
|
|
||||||
|
|
||||||
// utilities
|
// utilities
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
// D3D codes
|
// D3D codes
|
||||||
eD3D_DEVTYPE,
|
eD3D_DEVTYPE,
|
||||||
eD3D_FORMAT,
|
eD3D_FORMAT,
|
||||||
eD3D_RTYPE,
|
eD3D_RTYPE,
|
||||||
eD3D_USAGE,
|
eD3D_USAGE,
|
||||||
eD3D_RSTATE, // render state
|
eD3D_RSTATE, // render state
|
||||||
eD3D_SIO, // D3D shader bytecode
|
eD3D_SIO, // D3D shader bytecode
|
||||||
eD3D_VTXDECLUSAGE,
|
eD3D_VTXDECLUSAGE,
|
||||||
|
|
||||||
// CGL codes
|
// CGL codes
|
||||||
eCGL_RENDID,
|
eCGL_RENDID,
|
||||||
|
|
||||||
// OpenGL error codes
|
// OpenGL error codes
|
||||||
eGL_ERROR,
|
eGL_ERROR,
|
||||||
|
|
||||||
// OpenGL enums
|
// OpenGL enums
|
||||||
eGL_ENUM,
|
eGL_ENUM,
|
||||||
eGL_RENDERER
|
eGL_RENDERER
|
||||||
|
|
||||||
} GLMThing_t;
|
} GLMThing_t;
|
||||||
|
|
||||||
const char* GLMDecode( GLMThing_t type, unsigned long value ); // decode a numeric const
|
const char* GLMDecode( GLMThing_t type, unsigned long value ); // decode a numeric const
|
||||||
const char* GLMDecodeMask( GLMThing_t type, unsigned long value ); // decode a bitmask
|
const char* GLMDecodeMask( GLMThing_t type, unsigned long value ); // decode a bitmask
|
||||||
|
|
||||||
void GLMStop( void ); // aka Debugger()
|
void GLMStop( void ); // aka Debugger()
|
||||||
void GLMCheckError( bool noStop = false, bool noLog= false );
|
void GLMCheckError( bool noStop = false, bool noLog= false );
|
||||||
void GLMEnableTrace( bool on );
|
void GLMEnableTrace( bool on );
|
||||||
|
|
||||||
// expose these in release now
|
// expose these in release now
|
||||||
// Mimic PIX events so we can decorate debug spew
|
// Mimic PIX events so we can decorate debug spew
|
||||||
void GLMBeginPIXEvent( const char *str );
|
void GLMBeginPIXEvent( const char *str );
|
||||||
void GLMEndPIXEvent( void );
|
void GLMEndPIXEvent( void );
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
// knob twiddling
|
// knob twiddling
|
||||||
float GLMKnob( char *knobname, float *setvalue ); // Pass NULL to not-set the knob value
|
float GLMKnob( char *knobname, float *setvalue ); // Pass NULL to not-set the knob value
|
||||||
float GLMKnobToggle( char *knobname );
|
float GLMKnobToggle( char *knobname );
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
// other stuff
|
// other stuff
|
||||||
|
|
||||||
// helpers for CGLSetOption - no op if no profiler
|
// helpers for CGLSetOption - no op if no profiler
|
||||||
void GLMProfilerClearTrace( void );
|
void GLMProfilerClearTrace( void );
|
||||||
void GLMProfilerEnableTrace( bool enable );
|
void GLMProfilerEnableTrace( bool enable );
|
||||||
|
|
||||||
// helpers for CGLSetParameter - no op if no profiler
|
// helpers for CGLSetParameter - no op if no profiler
|
||||||
void GLMProfilerDumpState( void );
|
void GLMProfilerDumpState( void );
|
||||||
|
|
||||||
|
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
// classes
|
// classes
|
||||||
|
|
||||||
// helper class making function tracking easier to wire up
|
// helper class making function tracking easier to wire up
|
||||||
#if GLMDEBUG
|
#if GLMDEBUG
|
||||||
class GLMFuncLogger
|
class GLMFuncLogger
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// simple function log
|
// simple function log
|
||||||
GLMFuncLogger( const char *funcName )
|
GLMFuncLogger( const char *funcName )
|
||||||
{
|
{
|
||||||
m_funcName = funcName;
|
m_funcName = funcName;
|
||||||
m_earlyOut = false;
|
m_earlyOut = false;
|
||||||
|
|
||||||
GLMPrintf( ">%s", m_funcName );
|
GLMPrintf( ">%s", m_funcName );
|
||||||
};
|
};
|
||||||
|
|
||||||
// more advanced version lets you pass args (i.e. called parameters or anything else of interest)
|
// more advanced version lets you pass args (i.e. called parameters or anything else of interest)
|
||||||
// no macro for this one, since no easy way to pass through the args as well as the funcname
|
// no macro for this one, since no easy way to pass through the args as well as the funcname
|
||||||
GLMFuncLogger( const char *funcName, char *fmt, ... )
|
GLMFuncLogger( const char *funcName, char *fmt, ... )
|
||||||
{
|
{
|
||||||
m_funcName = funcName;
|
m_funcName = funcName;
|
||||||
m_earlyOut = false;
|
m_earlyOut = false;
|
||||||
|
|
||||||
// this acts like GLMPrintf here
|
// this acts like GLMPrintf here
|
||||||
// all the indent policy is down in GLMPrintfVA
|
// all the indent policy is down in GLMPrintfVA
|
||||||
// which means we need to inject a ">" at the front of the format string to make this work... sigh.
|
// which means we need to inject a ">" at the front of the format string to make this work... sigh.
|
||||||
|
|
||||||
char modifiedFmt[2000];
|
char modifiedFmt[2000];
|
||||||
modifiedFmt[0] = '>';
|
modifiedFmt[0] = '>';
|
||||||
strcpy( modifiedFmt+1, fmt );
|
strcpy( modifiedFmt+1, fmt );
|
||||||
|
|
||||||
va_list vargs;
|
va_list vargs;
|
||||||
va_start(vargs, fmt);
|
va_start(vargs, fmt);
|
||||||
GLMPrintfVA( modifiedFmt, vargs );
|
GLMPrintfVA( modifiedFmt, vargs );
|
||||||
va_end( vargs );
|
va_end( vargs );
|
||||||
}
|
}
|
||||||
|
|
||||||
~GLMFuncLogger( )
|
~GLMFuncLogger( )
|
||||||
{
|
{
|
||||||
if (m_earlyOut)
|
if (m_earlyOut)
|
||||||
{
|
{
|
||||||
GLMPrintf( "<%s (early out)", m_funcName );
|
GLMPrintf( "<%s (early out)", m_funcName );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GLMPrintf( "<%s", m_funcName );
|
GLMPrintf( "<%s", m_funcName );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void EarlyOut( void )
|
void EarlyOut( void )
|
||||||
{
|
{
|
||||||
m_earlyOut = true;
|
m_earlyOut = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *m_funcName; // set at construction time
|
const char *m_funcName; // set at construction time
|
||||||
bool m_earlyOut;
|
bool m_earlyOut;
|
||||||
};
|
};
|
||||||
|
|
||||||
// handy macro to go with the function tracking class
|
// handy macro to go with the function tracking class
|
||||||
#define GLM_FUNC GLMFuncLogger _logger_ ( __FUNCTION__ )
|
#define GLM_FUNC GLMFuncLogger _logger_ ( __FUNCTION__ )
|
||||||
#else
|
#else
|
||||||
#define GLM_FUNC
|
#define GLM_FUNC
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// class to keep an in-memory mirror of a file which may be getting edited during run
|
// class to keep an in-memory mirror of a file which may be getting edited during run
|
||||||
class CGLMFileMirror
|
class CGLMFileMirror
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CGLMFileMirror( char *fullpath ); // just associates mirror with file. if file exists it will be read.
|
CGLMFileMirror( char *fullpath ); // just associates mirror with file. if file exists it will be read.
|
||||||
//if non existent it will be created with size zero
|
//if non existent it will be created with size zero
|
||||||
~CGLMFileMirror( );
|
~CGLMFileMirror( );
|
||||||
|
|
||||||
bool HasData( void ); // see if data avail
|
bool HasData( void ); // see if data avail
|
||||||
void GetData( char **dataPtr, uint *dataSizePtr ); // read it out
|
void GetData( char **dataPtr, uint *dataSizePtr ); // read it out
|
||||||
void SetData( char *data, uint dataSize ); // put data in (and write it to disk)
|
void SetData( char *data, uint dataSize ); // put data in (and write it to disk)
|
||||||
bool PollForChanges( void ); // check disk copy. If different, read it back in and return true.
|
bool PollForChanges( void ); // check disk copy. If different, read it back in and return true.
|
||||||
|
|
||||||
void UpdateStatInfo( void ); // make sure stat info is current for our file
|
void UpdateStatInfo( void ); // make sure stat info is current for our file
|
||||||
void ReadFile( void );
|
void ReadFile( void );
|
||||||
void WriteFile( void );
|
void WriteFile( void );
|
||||||
|
|
||||||
void OpenInEditor( bool foreground=false ); // pass TRUE if you would like the editor to pop to foreground
|
void OpenInEditor( bool foreground=false ); // pass TRUE if you would like the editor to pop to foreground
|
||||||
|
|
||||||
/// how about a "wait for change" method..
|
/// how about a "wait for change" method..
|
||||||
|
|
||||||
char *m_path; // fullpath to file
|
char *m_path; // fullpath to file
|
||||||
bool m_exists;
|
bool m_exists;
|
||||||
struct stat m_stat; // stat results for the file (last time checked)
|
struct stat m_stat; // stat results for the file (last time checked)
|
||||||
|
|
||||||
char *m_data; // content of file
|
char *m_data; // content of file
|
||||||
uint m_size; // length of content
|
uint m_size; // length of content
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// class based on the file mirror, that makes it easy to edit them outside the app.
|
// class based on the file mirror, that makes it easy to edit them outside the app.
|
||||||
|
|
||||||
// it receives an initial block of text from the engine, and hashes it. ("orig")
|
// it receives an initial block of text from the engine, and hashes it. ("orig")
|
||||||
// it munges it by duplicating all the text after the "!!" line, and appending it in commented form. ("munged")
|
// it munges it by duplicating all the text after the "!!" line, and appending it in commented form. ("munged")
|
||||||
// a mirror file is activated, using a filename based on the hash from the orig text.
|
// a mirror file is activated, using a filename based on the hash from the orig text.
|
||||||
// if there is already content on disk matching that filename, use that content *unless* the 'blitz' parameter is set.
|
// if there is already content on disk matching that filename, use that content *unless* the 'blitz' parameter is set.
|
||||||
// (i.e. engine is instructing this subsystem to wipe out any old/modified variants of the text)
|
// (i.e. engine is instructing this subsystem to wipe out any old/modified variants of the text)
|
||||||
|
|
||||||
|
|
||||||
class CGLMEditableTextItem
|
class CGLMEditableTextItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CGLMEditableTextItem( char *text, uint size, bool forceOverwrite, char *prefix, char *suffix = NULL ); // create a text blob from text source, optional filename suffix
|
CGLMEditableTextItem( char *text, uint size, bool forceOverwrite, char *prefix, char *suffix = NULL ); // create a text blob from text source, optional filename suffix
|
||||||
~CGLMEditableTextItem( );
|
~CGLMEditableTextItem( );
|
||||||
|
|
||||||
bool HasData( void );
|
bool HasData( void );
|
||||||
bool PollForChanges( void ); // return true if stale i.e. you need to get a new edition
|
bool PollForChanges( void ); // return true if stale i.e. you need to get a new edition
|
||||||
void GetCurrentText( char **textOut, uint *sizeOut ); // query for read access to the active blob (could be the original, could be external edited copy)
|
void GetCurrentText( char **textOut, uint *sizeOut ); // query for read access to the active blob (could be the original, could be external edited copy)
|
||||||
void OpenInEditor( bool foreground=false ); // call user attention to this text
|
void OpenInEditor( bool foreground=false ); // call user attention to this text
|
||||||
|
|
||||||
// internal methods
|
// internal methods
|
||||||
void GenHashOfOrigText( void );
|
void GenHashOfOrigText( void );
|
||||||
void GenBaseNameAndFullPath( char *prefix, char *suffix );
|
void GenBaseNameAndFullPath( char *prefix, char *suffix );
|
||||||
void GenMungedText( bool fromMirror );
|
void GenMungedText( bool fromMirror );
|
||||||
|
|
||||||
// members
|
// members
|
||||||
// orig
|
// orig
|
||||||
uint m_origSize;
|
uint m_origSize;
|
||||||
char *m_origText; // what was submitted
|
char *m_origText; // what was submitted
|
||||||
unsigned char m_origDigest[MD5_DIGEST_LENGTH]; // digest of what was submitted
|
unsigned char m_origDigest[MD5_DIGEST_LENGTH]; // digest of what was submitted
|
||||||
|
|
||||||
// munged
|
// munged
|
||||||
uint m_mungedSize;
|
uint m_mungedSize;
|
||||||
char *m_mungedText; // re-processed edition, initial content submission to the file mirror
|
char *m_mungedText; // re-processed edition, initial content submission to the file mirror
|
||||||
|
|
||||||
// mirror
|
// mirror
|
||||||
char *m_mirrorBaseName; // generated from the hash of the orig text, plus the label / prefix
|
char *m_mirrorBaseName; // generated from the hash of the orig text, plus the label / prefix
|
||||||
char *m_mirrorFullPath; // base name
|
char *m_mirrorFullPath; // base name
|
||||||
CGLMFileMirror *m_mirror; // file mirror itself. holds "official" copy for GetCurrentText to return.
|
CGLMFileMirror *m_mirror; // file mirror itself. holds "official" copy for GetCurrentText to return.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// debug font
|
// debug font
|
||||||
extern unsigned char g_glmDebugFontMap[16384];
|
extern unsigned char g_glmDebugFontMap[16384];
|
||||||
|
|
||||||
// class for cracking multi-part text blobs
|
// class for cracking multi-part text blobs
|
||||||
// sections are demarcated by beginning-of-line markers submitted in a table by the caller
|
// sections are demarcated by beginning-of-line markers submitted in a table by the caller
|
||||||
|
|
||||||
struct GLMTextSection
|
struct GLMTextSection
|
||||||
{
|
{
|
||||||
int m_markerIndex; // based on table of markers passed in to constructor
|
int m_markerIndex; // based on table of markers passed in to constructor
|
||||||
uint m_textOffset; // where is the text - offset
|
uint m_textOffset; // where is the text - offset
|
||||||
int m_textLength; // how big is the section
|
int m_textLength; // how big is the section
|
||||||
};
|
};
|
||||||
|
|
||||||
class CGLMTextSectioner
|
class CGLMTextSectioner
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CGLMTextSectioner( char *text, int textSize, char **markers ); // constructor finds all the sections
|
CGLMTextSectioner( char *text, int textSize, char **markers ); // constructor finds all the sections
|
||||||
~CGLMTextSectioner( );
|
~CGLMTextSectioner( );
|
||||||
|
|
||||||
int Count( void ); // how many sections found
|
int Count( void ); // how many sections found
|
||||||
void GetSection( int index, uint *offsetOut, uint *lengthOut, int *markerIndexOut );
|
void GetSection( int index, uint *offsetOut, uint *lengthOut, int *markerIndexOut );
|
||||||
// find section, size, what marker
|
// find section, size, what marker
|
||||||
// note that more than one section can be marked similarly.
|
// note that more than one section can be marked similarly.
|
||||||
// so policy isn't made here, you walk the sections and decide what to do if there are dupes.
|
// so policy isn't made here, you walk the sections and decide what to do if there are dupes.
|
||||||
|
|
||||||
//members
|
//members
|
||||||
|
|
||||||
//section table
|
//section table
|
||||||
CUtlVector< GLMTextSection > m_sectionTable;
|
CUtlVector< GLMTextSection > m_sectionTable;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,93 +1,93 @@
|
|||||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
//
|
//
|
||||||
// glmgrext.h
|
// glmgrext.h
|
||||||
// helper file for extension testing and runtime importing of entry points
|
// helper file for extension testing and runtime importing of entry points
|
||||||
//
|
//
|
||||||
//===============================================================================
|
//===============================================================================
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifdef OSX
|
#ifdef OSX
|
||||||
#include <OpenGL/gl.h>
|
#include <OpenGL/gl.h>
|
||||||
#include <OpenGL/glext.h>
|
#include <OpenGL/glext.h>
|
||||||
#elif defined(LINUX)
|
#elif defined(LINUX)
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
#include <GL/glext.h>
|
#include <GL/glext.h>
|
||||||
#else
|
#else
|
||||||
#error
|
#error
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GL_EXT_framebuffer_sRGB
|
#ifndef GL_EXT_framebuffer_sRGB
|
||||||
#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9
|
#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9
|
||||||
#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA
|
#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ARB_texture_rg
|
#ifndef ARB_texture_rg
|
||||||
#define GL_COMPRESSED_RED 0x8225
|
#define GL_COMPRESSED_RED 0x8225
|
||||||
#define GL_COMPRESSED_RG 0x8226
|
#define GL_COMPRESSED_RG 0x8226
|
||||||
#define GL_RG 0x8227
|
#define GL_RG 0x8227
|
||||||
#define GL_RG_INTEGER 0x8228
|
#define GL_RG_INTEGER 0x8228
|
||||||
#define GL_R8 0x8229
|
#define GL_R8 0x8229
|
||||||
#define GL_R16 0x822A
|
#define GL_R16 0x822A
|
||||||
#define GL_RG8 0x822B
|
#define GL_RG8 0x822B
|
||||||
#define GL_RG16 0x822C
|
#define GL_RG16 0x822C
|
||||||
#define GL_R16F 0x822D
|
#define GL_R16F 0x822D
|
||||||
#define GL_R32F 0x822E
|
#define GL_R32F 0x822E
|
||||||
#define GL_RG16F 0x822F
|
#define GL_RG16F 0x822F
|
||||||
#define GL_RG32F 0x8230
|
#define GL_RG32F 0x8230
|
||||||
#define GL_R8I 0x8231
|
#define GL_R8I 0x8231
|
||||||
#define GL_R8UI 0x8232
|
#define GL_R8UI 0x8232
|
||||||
#define GL_R16I 0x8233
|
#define GL_R16I 0x8233
|
||||||
#define GL_R16UI 0x8234
|
#define GL_R16UI 0x8234
|
||||||
#define GL_R32I 0x8235
|
#define GL_R32I 0x8235
|
||||||
#define GL_R32UI 0x8236
|
#define GL_R32UI 0x8236
|
||||||
#define GL_RG8I 0x8237
|
#define GL_RG8I 0x8237
|
||||||
#define GL_RG8UI 0x8238
|
#define GL_RG8UI 0x8238
|
||||||
#define GL_RG16I 0x8239
|
#define GL_RG16I 0x8239
|
||||||
#define GL_RG16UI 0x823A
|
#define GL_RG16UI 0x823A
|
||||||
#define GL_RG32I 0x823B
|
#define GL_RG32I 0x823B
|
||||||
#define GL_RG32UI 0x823C
|
#define GL_RG32UI 0x823C
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GL_EXT_bindable_uniform
|
#ifndef GL_EXT_bindable_uniform
|
||||||
#define GL_UNIFORM_BUFFER_EXT 0x8DEE
|
#define GL_UNIFORM_BUFFER_EXT 0x8DEE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// unpublished extension enums (thus the "X")
|
// unpublished extension enums (thus the "X")
|
||||||
|
|
||||||
// from EXT_framebuffer_multisample_blit_scaled..
|
// from EXT_framebuffer_multisample_blit_scaled..
|
||||||
#define XGL_SCALED_RESOLVE_FASTEST_EXT 0x90BA
|
#define XGL_SCALED_RESOLVE_FASTEST_EXT 0x90BA
|
||||||
#define XGL_SCALED_RESOLVE_NICEST_EXT 0x90BB
|
#define XGL_SCALED_RESOLVE_NICEST_EXT 0x90BB
|
||||||
|
|
||||||
#ifndef GL_TEXTURE_MINIMIZE_STORAGE_APPLE
|
#ifndef GL_TEXTURE_MINIMIZE_STORAGE_APPLE
|
||||||
#define GL_TEXTURE_MINIMIZE_STORAGE_APPLE 0x85B6
|
#define GL_TEXTURE_MINIMIZE_STORAGE_APPLE 0x85B6
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GL_ALL_COMPLETED_NV
|
#ifndef GL_ALL_COMPLETED_NV
|
||||||
#define GL_ALL_COMPLETED_NV 0x84F2
|
#define GL_ALL_COMPLETED_NV 0x84F2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GL_MAP_READ_BIT
|
#ifndef GL_MAP_READ_BIT
|
||||||
#define GL_MAP_READ_BIT 0x0001
|
#define GL_MAP_READ_BIT 0x0001
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GL_MAP_WRITE_BIT
|
#ifndef GL_MAP_WRITE_BIT
|
||||||
#define GL_MAP_WRITE_BIT 0x0002
|
#define GL_MAP_WRITE_BIT 0x0002
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GL_MAP_INVALIDATE_RANGE_BIT
|
#ifndef GL_MAP_INVALIDATE_RANGE_BIT
|
||||||
#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
|
#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GL_MAP_INVALIDATE_BUFFER_BIT
|
#ifndef GL_MAP_INVALIDATE_BUFFER_BIT
|
||||||
#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
|
#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GL_MAP_FLUSH_EXPLICIT_BIT
|
#ifndef GL_MAP_FLUSH_EXPLICIT_BIT
|
||||||
#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
|
#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GL_MAP_UNSYNCHRONIZED_BIT
|
#ifndef GL_MAP_UNSYNCHRONIZED_BIT
|
||||||
#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
|
#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1,112 +1,112 @@
|
|||||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
/******************************************************************/
|
/******************************************************************/
|
||||||
/* qsort.c -- Non-Recursive ANSI Quicksort function */
|
/* qsort.c -- Non-Recursive ANSI Quicksort function */
|
||||||
/* */
|
/* */
|
||||||
/* Public domain by Raymond Gardner, Englewood CO February 1991 */
|
/* Public domain by Raymond Gardner, Englewood CO February 1991 */
|
||||||
/* */
|
/* */
|
||||||
/* Usage: */
|
/* Usage: */
|
||||||
/* qsort(base, nbr_elements, width_bytes, compare_function); */
|
/* qsort(base, nbr_elements, width_bytes, compare_function); */
|
||||||
/* void *base; */
|
/* void *base; */
|
||||||
/* size_t nbr_elements, width_bytes; */
|
/* size_t nbr_elements, width_bytes; */
|
||||||
/* int (*compare_function)(const void *, const void *); */
|
/* int (*compare_function)(const void *, const void *); */
|
||||||
/* */
|
/* */
|
||||||
/* Sorts an array starting at base, of length nbr_elements, each */
|
/* Sorts an array starting at base, of length nbr_elements, each */
|
||||||
/* element of size width_bytes, ordered via compare_function, */
|
/* element of size width_bytes, ordered via compare_function, */
|
||||||
/* which is called as (*compare_function)(ptr_to_element1, */
|
/* which is called as (*compare_function)(ptr_to_element1, */
|
||||||
/* ptr_to_element2) and returns < 0 if element1 < element2, */
|
/* ptr_to_element2) and returns < 0 if element1 < element2, */
|
||||||
/* 0 if element1 = element2, > 0 if element1 > element2. */
|
/* 0 if element1 = element2, > 0 if element1 > element2. */
|
||||||
/* Most refinements are due to R. Sedgewick. See "Implementing */
|
/* Most refinements are due to R. Sedgewick. See "Implementing */
|
||||||
/* Quicksort Programs", Comm. ACM, Oct. 1978, and Corrigendum, */
|
/* Quicksort Programs", Comm. ACM, Oct. 1978, and Corrigendum, */
|
||||||
/* Comm. ACM, June 1979. */
|
/* Comm. ACM, June 1979. */
|
||||||
/******************************************************************/
|
/******************************************************************/
|
||||||
|
|
||||||
// modified to take (and use) a context object, ala Microsoft's qsort_s
|
// modified to take (and use) a context object, ala Microsoft's qsort_s
|
||||||
// "extension" to the stdlib
|
// "extension" to the stdlib
|
||||||
|
|
||||||
#include <stddef.h> /* for size_t definition */
|
#include <stddef.h> /* for size_t definition */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** swap nbytes between a and b
|
** swap nbytes between a and b
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void swap_bytes(char *a, char *b, size_t nbytes)
|
static void swap_bytes(char *a, char *b, size_t nbytes)
|
||||||
{
|
{
|
||||||
char tmp;
|
char tmp;
|
||||||
do {
|
do {
|
||||||
tmp = *a; *a++ = *b; *b++ = tmp;
|
tmp = *a; *a++ = *b; *b++ = tmp;
|
||||||
} while ( --nbytes );
|
} while ( --nbytes );
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SWAP(a, b) (swap_bytes((char *)(a), (char *)(b), size))
|
#define SWAP(a, b) (swap_bytes((char *)(a), (char *)(b), size))
|
||||||
|
|
||||||
#define COMP(ctx, a, b) ((*comp)((void *)ctx, (void *)(a), (void *)(b)))
|
#define COMP(ctx, a, b) ((*comp)((void *)ctx, (void *)(a), (void *)(b)))
|
||||||
|
|
||||||
#define T 7 /* subfiles of T or fewer elements will */
|
#define T 7 /* subfiles of T or fewer elements will */
|
||||||
/* be sorted by a simple insertion sort */
|
/* be sorted by a simple insertion sort */
|
||||||
/* Note! T must be at least 3 */
|
/* Note! T must be at least 3 */
|
||||||
|
|
||||||
extern "C" void qsort_s(void *basep, size_t nelems, size_t size,
|
extern "C" void qsort_s(void *basep, size_t nelems, size_t size,
|
||||||
int (*comp)(void *, const void *, const void *),
|
int (*comp)(void *, const void *, const void *),
|
||||||
void *ctx)
|
void *ctx)
|
||||||
{
|
{
|
||||||
char *stack[40], **sp; /* stack and stack pointer */
|
char *stack[40], **sp; /* stack and stack pointer */
|
||||||
char *i, *j, *limit; /* scan and limit pointers */
|
char *i, *j, *limit; /* scan and limit pointers */
|
||||||
size_t thresh; /* size of T elements in bytes */
|
size_t thresh; /* size of T elements in bytes */
|
||||||
char *base; /* base pointer as char * */
|
char *base; /* base pointer as char * */
|
||||||
|
|
||||||
base = (char *)basep; /* set up char * base pointer */
|
base = (char *)basep; /* set up char * base pointer */
|
||||||
thresh = T * size; /* init threshold */
|
thresh = T * size; /* init threshold */
|
||||||
sp = stack; /* init stack pointer */
|
sp = stack; /* init stack pointer */
|
||||||
limit = base + nelems * size;/* pointer past end of array */
|
limit = base + nelems * size;/* pointer past end of array */
|
||||||
for ( ;; ) { /* repeat until break... */
|
for ( ;; ) { /* repeat until break... */
|
||||||
if ( limit - base > thresh ) { /* if more than T elements */
|
if ( limit - base > thresh ) { /* if more than T elements */
|
||||||
/* swap base with middle */
|
/* swap base with middle */
|
||||||
SWAP((((limit-base)/size)/2)*size+base, base);
|
SWAP((((limit-base)/size)/2)*size+base, base);
|
||||||
i = base + size; /* i scans left to right */
|
i = base + size; /* i scans left to right */
|
||||||
j = limit - size; /* j scans right to left */
|
j = limit - size; /* j scans right to left */
|
||||||
if ( COMP(ctx, i, j) > 0 ) /* Sedgewick's */
|
if ( COMP(ctx, i, j) > 0 ) /* Sedgewick's */
|
||||||
SWAP(i, j); /* three-element sort */
|
SWAP(i, j); /* three-element sort */
|
||||||
if ( COMP(ctx, base, j) > 0 )/* sets things up */
|
if ( COMP(ctx, base, j) > 0 )/* sets things up */
|
||||||
SWAP(base, j); /* so that */
|
SWAP(base, j); /* so that */
|
||||||
if ( COMP(ctx, i, base) > 0 )/* *i <= *base <= *j */
|
if ( COMP(ctx, i, base) > 0 )/* *i <= *base <= *j */
|
||||||
SWAP(i, base); /* *base is pivot element */
|
SWAP(i, base); /* *base is pivot element */
|
||||||
for ( ;; ) { /* loop until break */
|
for ( ;; ) { /* loop until break */
|
||||||
do /* move i right */
|
do /* move i right */
|
||||||
i += size; /* until *i >= pivot */
|
i += size; /* until *i >= pivot */
|
||||||
while ( COMP(ctx, i, base) < 0 );
|
while ( COMP(ctx, i, base) < 0 );
|
||||||
do /* move j left */
|
do /* move j left */
|
||||||
j -= size; /* until *j <= pivot */
|
j -= size; /* until *j <= pivot */
|
||||||
while ( COMP(ctx, j, base) > 0 );
|
while ( COMP(ctx, j, base) > 0 );
|
||||||
if ( i > j ) /* if pointers crossed */
|
if ( i > j ) /* if pointers crossed */
|
||||||
break; /* break loop */
|
break; /* break loop */
|
||||||
SWAP(i, j); /* else swap elements, keep scanning*/
|
SWAP(i, j); /* else swap elements, keep scanning*/
|
||||||
}
|
}
|
||||||
SWAP(base, j); /* move pivot into correct place */
|
SWAP(base, j); /* move pivot into correct place */
|
||||||
if ( j - base > limit - i ) { /* if left subfile larger */
|
if ( j - base > limit - i ) { /* if left subfile larger */
|
||||||
sp[0] = base; /* stack left subfile base */
|
sp[0] = base; /* stack left subfile base */
|
||||||
sp[1] = j; /* and limit */
|
sp[1] = j; /* and limit */
|
||||||
base = i; /* sort the right subfile */
|
base = i; /* sort the right subfile */
|
||||||
} else { /* else right subfile larger*/
|
} else { /* else right subfile larger*/
|
||||||
sp[0] = i; /* stack right subfile base */
|
sp[0] = i; /* stack right subfile base */
|
||||||
sp[1] = limit; /* and limit */
|
sp[1] = limit; /* and limit */
|
||||||
limit = j; /* sort the left subfile */
|
limit = j; /* sort the left subfile */
|
||||||
}
|
}
|
||||||
sp += 2; /* increment stack pointer */
|
sp += 2; /* increment stack pointer */
|
||||||
} else { /* else subfile is small, use insertion sort */
|
} else { /* else subfile is small, use insertion sort */
|
||||||
for ( j = base, i = j+size; i < limit; j = i, i += size )
|
for ( j = base, i = j+size; i < limit; j = i, i += size )
|
||||||
for ( ; COMP(ctx, j, j+size) > 0; j -= size ) {
|
for ( ; COMP(ctx, j, j+size) > 0; j -= size ) {
|
||||||
SWAP(j, j+size);
|
SWAP(j, j+size);
|
||||||
if ( j == base )
|
if ( j == base )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ( sp != stack ) { /* if any entries on stack */
|
if ( sp != stack ) { /* if any entries on stack */
|
||||||
sp -= 2; /* pop the base and limit */
|
sp -= 2; /* pop the base and limit */
|
||||||
base = sp[0];
|
base = sp[0];
|
||||||
limit = sp[1];
|
limit = sp[1];
|
||||||
} else /* else stack empty, done */
|
} else /* else stack empty, done */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user