2012-04-19 21:22:08 +00:00
|
|
|
/* ZZ Open GL graphics plugin
|
|
|
|
* Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com
|
|
|
|
* Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef ZZOGLFLUSH_H_INCLUDED
|
|
|
|
#define ZZOGLFLUSH_H_INCLUDED
|
|
|
|
|
|
|
|
#ifndef ZEROGS_DEVBUILD
|
|
|
|
|
|
|
|
#define INC_GENVARS()
|
|
|
|
#define INC_TEXVARS()
|
|
|
|
#define INC_ALPHAVARS()
|
|
|
|
#define INC_RESOLVE()
|
|
|
|
|
|
|
|
#define g_bUpdateEffect 0
|
|
|
|
#define g_bSaveTex 0
|
|
|
|
#define g_bSaveResolved 0
|
|
|
|
|
|
|
|
#else // defined(ZEROGS_DEVBUILD)
|
|
|
|
|
|
|
|
#define INC_GENVARS() ++g_nGenVars
|
|
|
|
#define INC_TEXVARS() ++g_nTexVars
|
|
|
|
#define INC_ALPHAVARS() ++g_nAlphaVars
|
|
|
|
#define INC_RESOLVE() ++g_nResolve
|
|
|
|
|
|
|
|
extern bool g_bUpdateEffect;
|
|
|
|
extern bool g_bSaveTex; // saves the current texture
|
|
|
|
extern bool g_bSaveResolved;
|
|
|
|
#endif // !defined(ZEROGS_DEVBUILD)
|
|
|
|
|
|
|
|
enum StencilBits
|
|
|
|
{
|
|
|
|
STENCIL_ALPHABIT = 1, // if set, dest alpha >= 0x80
|
|
|
|
STENCIL_PIXELWRITE = 2, // if set, pixel just written (reset after every Flush)
|
|
|
|
STENCIL_FBA = 4, // if set, just written pixel's alpha >= 0 (reset after every Flush)
|
|
|
|
STENCIL_SPECIAL = 8 // if set, indicates that pixel passed its alpha test (reset after every Flush)
|
|
|
|
//STENCIL_PBE = 16
|
|
|
|
};
|
|
|
|
#define STENCIL_CLEAR (2|4|8|16)
|
|
|
|
|
|
|
|
enum ColorMask
|
|
|
|
{
|
|
|
|
COLORMASK_RED = 1,
|
|
|
|
COLORMASK_GREEN = 2,
|
|
|
|
COLORMASK_BLUE = 4,
|
|
|
|
COLORMASK_ALPHA = 8
|
|
|
|
|
|
|
|
};
|
|
|
|
#define GL_COLORMASK(mask) glColorMask(!!((mask)&COLORMASK_RED), !!((mask)&COLORMASK_GREEN), !!((mask)&COLORMASK_BLUE), !!((mask)&COLORMASK_ALPHA))
|
|
|
|
|
|
|
|
// extern int g_nDepthBias;
|
|
|
|
extern float g_fBlockMult; // used for old cards, that do not support Alpha-32float textures. We store block data in u16 and use it.
|
|
|
|
extern u32 g_nCurVBOIndex;
|
|
|
|
extern u8* g_pbyGSClut;
|
|
|
|
extern int ppf;
|
|
|
|
|
|
|
|
extern bool s_bTexFlush;
|
|
|
|
|
|
|
|
extern vector<u32> s_vecTempTextures; // temporary textures, released at the end of every frame
|
|
|
|
extern GLuint g_vboBuffers[VB_NUMBUFFERS]; // VBOs for all drawing commands
|
|
|
|
extern CRangeManager s_RangeMngr; // manages overwritten memory // zz
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
typedef union
|
|
|
|
{
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
u8 _bNeedAlphaColor; // set if vAlphaBlendColor needs to be set
|
|
|
|
u8 _b2XAlphaTest; // Only valid when bNeedAlphaColor is set. if 1st bit set set, double all alpha testing values
|
|
|
|
// otherwise alpha testing needs to be done separately.
|
|
|
|
u8 _bDestAlphaColor; // set to 1 if blending with dest color (process only one tri at a time). If 2, dest alpha is always 1.
|
|
|
|
u8 _bAlphaClamping; // if first bit is set, do min; if second bit, do max
|
|
|
|
};
|
|
|
|
|
|
|
|
u32 _bAlphaState;
|
|
|
|
} g_flag_vars;
|
|
|
|
|
|
|
|
extern g_flag_vars g_vars;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
//#define bNeedAlphaColor g_vars._bNeedAlphaColor
|
|
|
|
//#define b2XAlphaTest g_vars._b2XAlphaTest
|
|
|
|
//#define bDestAlphaColor g_vars._bDestAlphaColor
|
|
|
|
//#define bAlphaClamping g_vars._bAlphaClamping
|
|
|
|
|
|
|
|
void FlushTransferRanges(const tex0Info* ptex); //zz
|
|
|
|
|
|
|
|
// use to update the state
|
|
|
|
void SetTexVariables(int context, FRAGMENTSHADER* pfragment); // zz
|
|
|
|
void SetTexInt(int context, FRAGMENTSHADER* pfragment, int settexint); // zz
|
|
|
|
void SetAlphaVariables(const alphaInfo& ainfo); // zzz
|
|
|
|
//void ResetAlphaVariables();
|
|
|
|
|
|
|
|
inline void SetAlphaTestInt(pixTest curtest);
|
|
|
|
|
2012-05-07 19:51:58 +00:00
|
|
|
inline void RenderAlphaTest(const VB& curvb, FRAGMENTSHADER* pfragment);
|
2012-04-19 21:22:08 +00:00
|
|
|
inline void RenderStencil(const VB& curvb, u32 dwUsingSpecialTesting);
|
|
|
|
inline void ProcessStencil(const VB& curvb);
|
2012-05-07 19:51:58 +00:00
|
|
|
inline void RenderFBA(const VB& curvb, FRAGMENTSHADER* pfragment);
|
|
|
|
inline void ProcessFBA(const VB& curvb, FRAGMENTSHADER* pfragment); // zz
|
2012-04-19 21:22:08 +00:00
|
|
|
|
|
|
|
void SetContextTarget(int context);
|
|
|
|
|
|
|
|
void SetWriteDepth();
|
|
|
|
bool IsWriteDepth();
|
|
|
|
void SetDestAlphaTest();
|
|
|
|
|
|
|
|
#endif // ZZOGLFLUSH_H_INCLUDED
|