mirror of https://github.com/PCSX2/pcsx2.git
zzogl-pg: Shuffle stuff out of zerogs.h to ZZGl.h and Util.h.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3377 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
4eb20d3f47
commit
841e326e0c
|
@ -248,6 +248,8 @@ typedef struct
|
|||
} GSconf;
|
||||
extern GSconf conf;
|
||||
|
||||
// ----------------------- Defines
|
||||
|
||||
#define REG64(name) \
|
||||
union name \
|
||||
{ \
|
||||
|
@ -282,6 +284,22 @@ union name \
|
|||
|
||||
#define REG_SET_END };
|
||||
|
||||
#ifndef SAFE_DELETE
|
||||
# define SAFE_DELETE(x) if( (x) != NULL ) { delete (x); (x) = NULL; }
|
||||
#endif
|
||||
#ifndef SAFE_DELETE_ARRAY
|
||||
# define SAFE_DELETE_ARRAY(x) if( (x) != NULL ) { delete[] (x); (x) = NULL; }
|
||||
#endif
|
||||
#ifndef SAFE_RELEASE
|
||||
# define SAFE_RELEASE(x) if( (x) != NULL ) { (x)->Release(); (x) = NULL; }
|
||||
#endif
|
||||
|
||||
#define FORIT(it, v) for(it = (v).begin(); it != (v).end(); ++(it))
|
||||
|
||||
#ifndef ARRAY_SIZE
|
||||
# define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
|
||||
#endif
|
||||
|
||||
extern void LoadConfig();
|
||||
extern void SaveConfig();
|
||||
|
||||
|
|
|
@ -29,6 +29,186 @@ inline void* wglGetProcAddress(const char* x)
|
|||
|
||||
#include <Cg/cg.h>
|
||||
#include <Cg/cgGL.h>
|
||||
#include <cstring>
|
||||
#include "zerogsmath.h"
|
||||
|
||||
// Defines
|
||||
|
||||
#ifndef GL_DEPTH24_STENCIL8_EXT // allows FBOs to support stencils
|
||||
# define GL_DEPTH_STENCIL_EXT 0x84F9
|
||||
# define GL_UNSIGNED_INT_24_8_EXT 0x84FA
|
||||
# define GL_DEPTH24_STENCIL8_EXT 0x88F0
|
||||
# define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1
|
||||
#endif
|
||||
|
||||
#define GL_STENCILFUNC(func, ref, mask) { \
|
||||
s_stencilfunc = func; \
|
||||
s_stencilref = ref; \
|
||||
s_stencilmask = mask; \
|
||||
glStencilFunc(func, ref, mask); \
|
||||
}
|
||||
|
||||
#define GL_STENCILFUNC_SET() glStencilFunc(s_stencilfunc, s_stencilref, s_stencilmask)
|
||||
|
||||
|
||||
// sets the data stream
|
||||
#define SET_STREAM() { \
|
||||
glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(VertexGPU), (void*)8); \
|
||||
glSecondaryColorPointerEXT(4, GL_UNSIGNED_BYTE, sizeof(VertexGPU), (void*)12); \
|
||||
glTexCoordPointer(3, GL_FLOAT, sizeof(VertexGPU), (void*)16); \
|
||||
glVertexPointer(4, GL_SHORT, sizeof(VertexGPU), (void*)0); \
|
||||
}
|
||||
|
||||
extern const char* ShaderCallerName;
|
||||
extern const char* ShaderHandleName;
|
||||
|
||||
inline void SetShaderCaller(const char* Name)
|
||||
{
|
||||
ShaderCallerName = Name;
|
||||
}
|
||||
|
||||
inline void SetHandleName(const char* Name)
|
||||
{
|
||||
ShaderHandleName = Name;
|
||||
}
|
||||
|
||||
extern void HandleCgError(CGcontext ctx, CGerror err, void* appdata);
|
||||
extern void ZZcgSetParameter4fv(CGparameter param, const float* v, const char* name);
|
||||
|
||||
#define SETVERTEXSHADER(prog) { \
|
||||
if( (prog) != g_vsprog ) { \
|
||||
cgGLBindProgram(prog); \
|
||||
g_vsprog = prog; \
|
||||
} \
|
||||
} \
|
||||
|
||||
#define SETPIXELSHADER(prog) { \
|
||||
if( (prog) != g_psprog ) { \
|
||||
cgGLBindProgram(prog); \
|
||||
g_psprog = prog; \
|
||||
} \
|
||||
} \
|
||||
|
||||
|
||||
#define SAFE_RELEASE_PROG(x) { if( (x) != NULL ) { cgDestroyProgram(x); x = NULL; } }
|
||||
#define SAFE_RELEASE_TEX(x) { if( (x) != 0 ) { glDeleteTextures(1, &(x)); x = 0; } }
|
||||
|
||||
// inline for an extremely often used sequence
|
||||
// This is turning off all gl functions. Safe to do updates.
|
||||
inline void DisableAllgl()
|
||||
{
|
||||
glDisable(GL_SCISSOR_TEST);
|
||||
glDisable(GL_BLEND);
|
||||
glDisable(GL_ALPHA_TEST);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glDepthMask(0);
|
||||
glDisable(GL_STENCIL_TEST);
|
||||
glColorMask(1, 1, 1, 1);
|
||||
}
|
||||
|
||||
|
||||
//--------------------- Dummies
|
||||
|
||||
#ifdef _WIN32
|
||||
extern void (__stdcall *zgsBlendEquationSeparateEXT)(GLenum, GLenum);
|
||||
extern void (__stdcall *zgsBlendFuncSeparateEXT)(GLenum, GLenum, GLenum, GLenum);
|
||||
#else
|
||||
extern void (APIENTRY *zgsBlendEquationSeparateEXT)(GLenum, GLenum);
|
||||
extern void (APIENTRY *zgsBlendFuncSeparateEXT)(GLenum, GLenum, GLenum, GLenum);
|
||||
#endif
|
||||
|
||||
|
||||
// ------------------------ Types -------------------------
|
||||
|
||||
struct FRAGMENTSHADER
|
||||
{
|
||||
FRAGMENTSHADER() : prog(0), sMemory(0), sFinal(0), sBitwiseANDX(0), sBitwiseANDY(0), sInterlace(0), sCLUT(0), sOneColor(0), sBitBltZ(0),
|
||||
fTexAlpha2(0), fTexOffset(0), fTexDims(0), fTexBlock(0), fClampExts(0), fTexWrapMode(0),
|
||||
fRealTexDims(0), fTestBlack(0), fPageOffset(0), fTexAlpha(0) {}
|
||||
|
||||
CGprogram prog;
|
||||
CGparameter sMemory, sFinal, sBitwiseANDX, sBitwiseANDY, sInterlace, sCLUT;
|
||||
CGparameter sOneColor, sBitBltZ, sInvTexDims;
|
||||
CGparameter fTexAlpha2, fTexOffset, fTexDims, fTexBlock, fClampExts, fTexWrapMode, fRealTexDims, fTestBlack, fPageOffset, fTexAlpha;
|
||||
|
||||
void set_uniform_param(CGparameter &var, const char *name)
|
||||
{
|
||||
CGparameter p;
|
||||
p = cgGetNamedParameter(prog, name);
|
||||
|
||||
if (p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE) var = p;
|
||||
}
|
||||
|
||||
bool set_texture(GLuint texobj, const char *name)
|
||||
{
|
||||
CGparameter p;
|
||||
|
||||
p = cgGetNamedParameter(prog, name);
|
||||
|
||||
if (p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE)
|
||||
{
|
||||
cgGLSetTextureParameter(p, texobj);
|
||||
cgGLEnableTextureParameter(p);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool connect(CGparameter &tex, const char *name)
|
||||
{
|
||||
CGparameter p;
|
||||
|
||||
p = cgGetNamedParameter(prog, name);
|
||||
|
||||
if (p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE)
|
||||
{
|
||||
cgConnectParameter(tex, p);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool set_texture(CGparameter &tex, const char *name)
|
||||
{
|
||||
CGparameter p;
|
||||
|
||||
p = cgGetNamedParameter(prog, name);
|
||||
|
||||
if (p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE)
|
||||
{
|
||||
//cgGLEnableTextureParameter(p);
|
||||
tex = p;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool set_shader_const(Vector v, const char *name)
|
||||
{
|
||||
CGparameter p;
|
||||
|
||||
p = cgGetNamedParameter(prog, name);
|
||||
|
||||
if (p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE)
|
||||
{
|
||||
cgGLSetParameter4fv(p, v);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
struct VERTEXSHADER
|
||||
{
|
||||
VERTEXSHADER() : prog(0), sBitBltPos(0), sBitBltTex(0) {}
|
||||
|
||||
CGprogram prog;
|
||||
CGparameter sBitBltPos, sBitBltTex, fBitBltTrans; // vertex shader constants
|
||||
};
|
||||
|
||||
// GL prototypes
|
||||
extern PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT;
|
||||
|
|
|
@ -37,100 +37,16 @@
|
|||
|
||||
using namespace std;
|
||||
|
||||
// ----------------------- Defines
|
||||
#ifndef GL_DEPTH24_STENCIL8_EXT // allows FBOs to support stencils
|
||||
# define GL_DEPTH_STENCIL_EXT 0x84F9
|
||||
# define GL_UNSIGNED_INT_24_8_EXT 0x84FA
|
||||
# define GL_DEPTH24_STENCIL8_EXT 0x88F0
|
||||
# define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1
|
||||
#endif
|
||||
|
||||
#define GL_STENCILFUNC(func, ref, mask) { \
|
||||
s_stencilfunc = func; \
|
||||
s_stencilref = ref; \
|
||||
s_stencilmask = mask; \
|
||||
glStencilFunc(func, ref, mask); \
|
||||
}
|
||||
|
||||
#define GL_STENCILFUNC_SET() glStencilFunc(s_stencilfunc, s_stencilref, s_stencilmask)
|
||||
|
||||
#ifndef SAFE_DELETE
|
||||
# define SAFE_DELETE(x) if( (x) != NULL ) { delete (x); (x) = NULL; }
|
||||
#endif
|
||||
#ifndef SAFE_DELETE_ARRAY
|
||||
# define SAFE_DELETE_ARRAY(x) if( (x) != NULL ) { delete[] (x); (x) = NULL; }
|
||||
#endif
|
||||
#ifndef SAFE_RELEASE
|
||||
# define SAFE_RELEASE(x) if( (x) != NULL ) { (x)->Release(); (x) = NULL; }
|
||||
#endif
|
||||
|
||||
#define SAFE_RELEASE_PROG(x) { if( (x) != NULL ) { cgDestroyProgram(x); x = NULL; } }
|
||||
#define SAFE_RELEASE_TEX(x) { if( (x) != 0 ) { glDeleteTextures(1, &(x)); x = 0; } }
|
||||
|
||||
#define FORIT(it, v) for(it = (v).begin(); it != (v).end(); ++(it))
|
||||
|
||||
// sets the data stream
|
||||
#define SET_STREAM() { \
|
||||
glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(VertexGPU), (void*)8); \
|
||||
glSecondaryColorPointerEXT(4, GL_UNSIGNED_BYTE, sizeof(VertexGPU), (void*)12); \
|
||||
glTexCoordPointer(3, GL_FLOAT, sizeof(VertexGPU), (void*)16); \
|
||||
glVertexPointer(4, GL_SHORT, sizeof(VertexGPU), (void*)0); \
|
||||
}
|
||||
|
||||
extern const char* ShaderCallerName;
|
||||
extern const char* ShaderHandleName;
|
||||
|
||||
inline void SetShaderCaller(const char* Name)
|
||||
{
|
||||
ShaderCallerName = Name;
|
||||
}
|
||||
|
||||
inline void SetHandleName(const char* Name)
|
||||
{
|
||||
ShaderHandleName = Name;
|
||||
}
|
||||
|
||||
extern void HandleCgError(CGcontext ctx, CGerror err, void* appdata);
|
||||
extern void ZZcgSetParameter4fv(CGparameter param, const float* v, const char* name);
|
||||
|
||||
#define SETVERTEXSHADER(prog) { \
|
||||
if( (prog) != g_vsprog ) { \
|
||||
cgGLBindProgram(prog); \
|
||||
g_vsprog = prog; \
|
||||
} \
|
||||
} \
|
||||
|
||||
#define SETPIXELSHADER(prog) { \
|
||||
if( (prog) != g_psprog ) { \
|
||||
cgGLBindProgram(prog); \
|
||||
g_psprog = prog; \
|
||||
} \
|
||||
} \
|
||||
|
||||
#ifndef ARRAY_SIZE
|
||||
# define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
|
||||
#endif
|
||||
|
||||
//------------------------ Constants ----------------------
|
||||
#define VB_BUFFERSIZE 0x400
|
||||
|
||||
// Used in logaripmic Z-test, as (1-o(1))/log(MAX_U32).
|
||||
// Used in a logarithmic Z-test, as (1-o(1))/log(MAX_U32).
|
||||
const float g_filog32 = 0.999f / (32.0f * logf(2.0f));
|
||||
|
||||
//------------------------ Inlines -------------------------
|
||||
|
||||
// inline for an extremely often used sequence
|
||||
// This is turning off all gl functions. Safe to do updates.
|
||||
inline void DisableAllgl()
|
||||
{
|
||||
glDisable(GL_SCISSOR_TEST);
|
||||
glDisable(GL_BLEND);
|
||||
glDisable(GL_ALPHA_TEST);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glDepthMask(0);
|
||||
glDisable(GL_STENCIL_TEST);
|
||||
glColorMask(1, 1, 1, 1);
|
||||
}
|
||||
|
||||
// Calculate maximum height for target
|
||||
inline int get_maxheight(int fbp, int fbw, int psm)
|
||||
|
@ -160,110 +76,6 @@ inline u8 GetTexCPSM(const tex0Info& tex)
|
|||
return tex.psm;
|
||||
}
|
||||
|
||||
//--------------------- Dummies
|
||||
|
||||
#ifdef _WIN32
|
||||
extern void (__stdcall *zgsBlendEquationSeparateEXT)(GLenum, GLenum);
|
||||
extern void (__stdcall *zgsBlendFuncSeparateEXT)(GLenum, GLenum, GLenum, GLenum);
|
||||
#else
|
||||
extern void (APIENTRY *zgsBlendEquationSeparateEXT)(GLenum, GLenum);
|
||||
extern void (APIENTRY *zgsBlendFuncSeparateEXT)(GLenum, GLenum, GLenum, GLenum);
|
||||
#endif
|
||||
|
||||
// ------------------------ Types -------------------------
|
||||
|
||||
struct FRAGMENTSHADER
|
||||
{
|
||||
FRAGMENTSHADER() : prog(0), sMemory(0), sFinal(0), sBitwiseANDX(0), sBitwiseANDY(0), sInterlace(0), sCLUT(0), sOneColor(0), sBitBltZ(0),
|
||||
fTexAlpha2(0), fTexOffset(0), fTexDims(0), fTexBlock(0), fClampExts(0), fTexWrapMode(0),
|
||||
fRealTexDims(0), fTestBlack(0), fPageOffset(0), fTexAlpha(0) {}
|
||||
|
||||
CGprogram prog;
|
||||
CGparameter sMemory, sFinal, sBitwiseANDX, sBitwiseANDY, sInterlace, sCLUT;
|
||||
CGparameter sOneColor, sBitBltZ, sInvTexDims;
|
||||
CGparameter fTexAlpha2, fTexOffset, fTexDims, fTexBlock, fClampExts, fTexWrapMode, fRealTexDims, fTestBlack, fPageOffset, fTexAlpha;
|
||||
|
||||
#ifdef _DEBUG
|
||||
string filename;
|
||||
#endif
|
||||
void set_uniform_param(CGparameter &var, const char *name)
|
||||
{
|
||||
CGparameter p;
|
||||
p = cgGetNamedParameter(prog, name);
|
||||
|
||||
if (p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE) var = p;
|
||||
}
|
||||
|
||||
bool set_texture(GLuint texobj, const char *name)
|
||||
{
|
||||
CGparameter p;
|
||||
|
||||
p = cgGetNamedParameter(prog, name);
|
||||
|
||||
if (p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE)
|
||||
{
|
||||
cgGLSetTextureParameter(p, texobj);
|
||||
cgGLEnableTextureParameter(p);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool connect(CGparameter &tex, const char *name)
|
||||
{
|
||||
CGparameter p;
|
||||
|
||||
p = cgGetNamedParameter(prog, name);
|
||||
|
||||
if (p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE)
|
||||
{
|
||||
cgConnectParameter(tex, p);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool set_texture(CGparameter &tex, const char *name)
|
||||
{
|
||||
CGparameter p;
|
||||
|
||||
p = cgGetNamedParameter(prog, name);
|
||||
|
||||
if (p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE)
|
||||
{
|
||||
//cgGLEnableTextureParameter(p);
|
||||
tex = p;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool set_shader_const(Vector v, const char *name)
|
||||
{
|
||||
CGparameter p;
|
||||
|
||||
p = cgGetNamedParameter(prog, name);
|
||||
|
||||
if (p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE)
|
||||
{
|
||||
cgGLSetParameter4fv(p, v);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
struct VERTEXSHADER
|
||||
{
|
||||
VERTEXSHADER() : prog(0), sBitBltPos(0), sBitBltTex(0) {}
|
||||
|
||||
CGprogram prog;
|
||||
CGparameter sBitBltPos, sBitBltTex, fBitBltTrans; // vertex shader constants
|
||||
};
|
||||
|
||||
// ------------------------ Variables -------------------------
|
||||
// all textures have this width
|
||||
|
@ -810,24 +622,4 @@ inline void CluttingForFlushedTex(tex0Info* tex0, u32 Data, int ictx)
|
|||
}
|
||||
};
|
||||
|
||||
//// GL prototypes
|
||||
//extern PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT;
|
||||
//extern PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT;
|
||||
//extern PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT;
|
||||
//extern PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT;
|
||||
//extern PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT;
|
||||
//extern PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glGetRenderbufferParameterivEXT;
|
||||
//extern PFNGLISFRAMEBUFFEREXTPROC glIsFramebufferEXT;
|
||||
//extern PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;
|
||||
//extern PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT;
|
||||
//extern PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT;
|
||||
//extern PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT;
|
||||
//extern PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glFramebufferTexture1DEXT;
|
||||
//extern PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT;
|
||||
//extern PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glFramebufferTexture3DEXT;
|
||||
//extern PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT;
|
||||
//extern PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetFramebufferAttachmentParameterivEXT;
|
||||
//extern PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmapEXT;
|
||||
//extern PFNGLDRAWBUFFERSPROC glDrawBuffers;
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue