123
This commit is contained in:
931
RenderDll/Common/RenderPipeline.h
Normal file
931
RenderDll/Common/RenderPipeline.h
Normal file
@@ -0,0 +1,931 @@
|
||||
|
||||
/*=============================================================================
|
||||
RenderPipeline.h : Shaders pipeline declarations.
|
||||
Copyright (c) 2001 Crytek Studios. All Rights Reserved.
|
||||
|
||||
Revision history:
|
||||
* Created by Honitch Andrey
|
||||
|
||||
=============================================================================*/
|
||||
|
||||
|
||||
#ifndef __RENDERPIPELINE_H__
|
||||
#define __RENDERPIPELINE_H__
|
||||
|
||||
//====================================================================
|
||||
|
||||
#define PIPE_USE_INSTANCING
|
||||
|
||||
#define NUMRI_LISTS 6
|
||||
#define MAX_HWINST_PARAMS 16384
|
||||
|
||||
typedef union UnINT64
|
||||
{
|
||||
uint64 SortVal;
|
||||
struct
|
||||
{
|
||||
uint Low;
|
||||
uint High;
|
||||
}i;
|
||||
} UnINT64;
|
||||
|
||||
struct SRendItemPre
|
||||
{
|
||||
UnINT64 SortVal;
|
||||
CRendElement *Item;
|
||||
union
|
||||
{
|
||||
uint ObjSort;
|
||||
float fDist;
|
||||
};
|
||||
uint DynLMask;
|
||||
};
|
||||
|
||||
struct SRendItemLight : SRendItemPre
|
||||
{
|
||||
};
|
||||
|
||||
struct SRendItemStenc : SRendItemPre
|
||||
{
|
||||
};
|
||||
|
||||
struct SRendItem : SRendItemPre
|
||||
{
|
||||
static void mfCalcRefractVectors(int Type, byte *Dst, int StrDst);
|
||||
static void mfCalcLightAttenuation(int type, byte *Dst, int StrideDst);
|
||||
static void mfCalcProjectVectors(int Type, float *Mat, float RefractIndex, byte *Dst, int StrDst);
|
||||
|
||||
static void mfCalcLightVectors(byte *lv, int Stride);
|
||||
static void mfCalcNormLightVectors(byte *lv, int Stride, int Type);
|
||||
static void mfCalcHalfAngles(int type, byte *ha, int StrHA);
|
||||
|
||||
static void mfCalcProjectAttenFromCamera(byte *dst, int Str);
|
||||
|
||||
static void mfCalcLAttenuationSpec0(byte *dst, int StrDst, byte *lv, int StrLV, int type);
|
||||
static void mfCalcLAttenuationSpec1(byte *dst, int StrDst, byte *lv, int StrLV, int type);
|
||||
|
||||
static void mfCalcLightVectors_Terrain(byte *lv, int Stride);
|
||||
static void mfCalcLAttenuationSpec0_Terrain(byte *dst, int StrDst, byte *lv, int StrLV, int type);
|
||||
static void mfCalcLAttenuationSpec1_Terrain(byte *dst, int StrDst, byte *lv, int StrLV, int type);
|
||||
static void mfCalcHalfAngles_Terrain(int type, byte *ha, int StrHA);
|
||||
|
||||
static void mfCalcTangentSpaceVectors();
|
||||
static void mfComputeTangent(const Vec3d& v0, const Vec3d& v1, const Vec3d& v2, const float t0[2], const float t1[2], const float t2[2], Vec3d &tangent, Vec3d& binormal, float& sign, Vec3d& face_normal);
|
||||
|
||||
//==================================================
|
||||
static void *mfGetPointerCommon(ESrcPointer ePT, int *Stride, int Type, ESrcPointer Dst, int Flags);
|
||||
|
||||
|
||||
#ifdef PIPE_USE_INSTANCING
|
||||
static _inline void mfAdd(CRendElement *Item, CCObject *pObj, SShader *Shader, int ResId, SShader *EfState, int numFog, int nTempl, int nSort=0)
|
||||
{
|
||||
int nList = nSort>>28;
|
||||
nSort &= 0xffff;
|
||||
int n = m_RendItems[nList].Num();
|
||||
m_RendItems[nList].AddIndex(1);
|
||||
SRendItemPre *ri = &m_RendItems[nList][n];
|
||||
int IdState = EfState ? EfState->m_Id : 0;
|
||||
nSort = (nSort > 0) ? nSort : Shader->m_eSort;
|
||||
int ObjNum;
|
||||
if (pObj)
|
||||
{
|
||||
ObjNum = pObj->m_VisId;
|
||||
ri->ObjSort = (pObj->m_ObjFlags & 0xffff0000) | pObj->m_nLMId;
|
||||
ri->DynLMask = pObj->m_DynLMMask;
|
||||
}
|
||||
else
|
||||
{
|
||||
ObjNum = 0;
|
||||
ri->ObjSort = 0;
|
||||
ri->DynLMask = 0;
|
||||
}
|
||||
ri->SortVal.i.Low = (ObjNum<<20) | (IdState<<8) | (numFog);
|
||||
ri->SortVal.i.High = (nSort<<26) | (Shader->m_Id<<14) | (ResId);
|
||||
ri->Item = Item;
|
||||
}
|
||||
static _inline void mfGet(UnINT64 flag, int *nObject, SShader **Shader, SShader **ShaderState, int *numFog, SRenderShaderResources **Res)
|
||||
{
|
||||
*numFog = flag.i.Low & 0x3f;
|
||||
*Shader = SShader::m_Shaders_known[(flag.i.High>>14) & 0xfff];
|
||||
int n = (flag.i.Low>>8) & 0xfff;
|
||||
*ShaderState = n ? SShader::m_Shaders_known[n] : NULL;
|
||||
*nObject = (flag.i.Low>>20) & 0xfff;
|
||||
n = flag.i.High & 0x3fff;
|
||||
*Res = (n) ? SShader::m_ShaderResources_known[n] : NULL;
|
||||
}
|
||||
static _inline void mfGetObj(UnINT64 flag, int *nObject)
|
||||
{
|
||||
*nObject = (flag.i.Low>>20) & 0xfff;
|
||||
}
|
||||
static _inline void mfGet(UnINT64 flag, SShader **Shader, SShader **ShaderState, SRenderShaderResources **Res)
|
||||
{
|
||||
*Shader = SShader::m_Shaders_known[(flag.i.High>>14) & 0xfff];
|
||||
int n = (flag.i.Low>>8) & 0xfff;
|
||||
*ShaderState = n ? SShader::m_Shaders_known[n] : NULL;
|
||||
n = flag.i.High & 0x3fff;
|
||||
*Res = (n) ? SShader::m_ShaderResources_known[n] : NULL;
|
||||
}
|
||||
static _inline SShader *mfGetShader(UnINT64 flag)
|
||||
{
|
||||
return SShader::m_Shaders_known[(flag.i.High>>14) & 0xfff];
|
||||
}
|
||||
#else
|
||||
static _inline void mfAdd(CRendElement *Item, CCObject *pObj, SShader *Shader, int ResId, SShader *EfState, int numFog, int nTempl, int nSort=0)
|
||||
{
|
||||
int nList = nSort>>28;
|
||||
nSort &= 0xffff;
|
||||
int n = m_RendItems[nList].Num();
|
||||
m_RendItems[nList].AddIndex(1);
|
||||
SRendItemPre *ri = &m_RendItems[nList][n];
|
||||
int IdState = EfState ? EfState->m_Id : 0;
|
||||
nSort = (nSort > 0) ? nSort : Shader->m_eSort;
|
||||
int ObjNum = pObj ? pObj->m_VisId : 0;
|
||||
ri->SortVal.i.Low = (Shader->m_Id<<20) | (IdState<<8) | (numFog);
|
||||
ri->SortVal.i.High = (nSort<<26) | (ObjNum<<15) | (ResId);
|
||||
ri->Item = Item;
|
||||
}
|
||||
static _inline void mfGet(UnINT64 flag, int *nObject, SShader **Shader, SShader **ShaderState, int *numFog, SRenderShaderResources **Res)
|
||||
{
|
||||
*numFog = flag.i.Low & 0x3f;
|
||||
*Shader = SShader::m_Shaders_known[(flag.i.Low>>20) & 0xfff];
|
||||
int n = (flag.i.Low>>8) & 0xfff;
|
||||
*ShaderState = n ? SShader::m_Shaders_known[n] : NULL;
|
||||
*nObject = (flag.i.High>>15) & 0x7ff;
|
||||
n = flag.i.High & 0x3fff;
|
||||
*Res = (n) ? SShader::m_ShaderResources_known[n] : NULL;
|
||||
}
|
||||
static _inline void mfGet(UnINT64 flag, SShader **Shader, SShader **ShaderState, SRenderShaderResources **Res)
|
||||
{
|
||||
*Shader = SShader::m_Shaders_known[(flag.i.Low>>20) & 0xfff];
|
||||
int n = (flag.i.Low>>8) & 0xfff;
|
||||
*ShaderState = n ? SShader::m_Shaders_known[n] : NULL;
|
||||
n = flag.i.High & 0x3fff;
|
||||
*Res = (n) ? SShader::m_ShaderResources_known[n] : NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Sort by SortVal member of RI
|
||||
static void mfSort(SRendItemPre *First, int Num);
|
||||
// Special Sorting ignoring shadow maps
|
||||
static void mfSortForStencil(SRendItemPre *First, int Num);
|
||||
// Sort by distance
|
||||
static void mfSortByDist(SRendItemPre *First, int Num);
|
||||
// Sort by light
|
||||
static void mfSortByLight(SRendItemPre *First, int Num);
|
||||
|
||||
static int m_RecurseLevel;
|
||||
static int m_StartRI[8][NUMRI_LISTS];
|
||||
static int m_EndRI[8][NUMRI_LISTS];
|
||||
static TArray<SRendItemPre> m_RendItems[];
|
||||
};
|
||||
|
||||
struct SRendItemPreprocess : public SRendItem
|
||||
{
|
||||
CCObject *m_Object;
|
||||
|
||||
static void mfSort(SRendItemPreprocess *First, int Num);
|
||||
};
|
||||
|
||||
struct SRefSprite
|
||||
{
|
||||
CCObject *m_pObj;
|
||||
};
|
||||
|
||||
//==================================================================
|
||||
|
||||
#define RNF_NOSHINE 0x1000
|
||||
|
||||
struct SMRendVert;
|
||||
struct SMRendTexVert;
|
||||
struct SShaderPass;
|
||||
struct SEvalFuncs;
|
||||
|
||||
union UPipeVertex
|
||||
{
|
||||
void *Ptr;
|
||||
byte *PtrB;
|
||||
float *PtrF;
|
||||
|
||||
Vec3d *VBPtr_0;
|
||||
struct_VERTEX_FORMAT_P3F *VBPtr_1;
|
||||
struct_VERTEX_FORMAT_P3F_COL4UB *VBPtr_2;
|
||||
struct_VERTEX_FORMAT_P3F_TEX2F *VBPtr_3;
|
||||
struct_VERTEX_FORMAT_P3F_COL4UB_TEX2F *VBPtr_4;
|
||||
struct_VERTEX_FORMAT_TRP3F_COL4UB_TEX2F *VBPtr_5;
|
||||
struct_VERTEX_FORMAT_P3F_COL4UB_COL4UB *VBPtr_6;
|
||||
struct_VERTEX_FORMAT_P3F_N *VBPtr_7;
|
||||
struct_VERTEX_FORMAT_P3F_N_COL4UB *VBPtr_8;
|
||||
struct_VERTEX_FORMAT_P3F_N_TEX2F *VBPtr_9;
|
||||
struct_VERTEX_FORMAT_P3F_N_COL4UB_TEX2F *VBPtr_10;
|
||||
SPipTangents *VBPtr_11;
|
||||
struct_VERTEX_FORMAT_TEX2F *VBPtr_12;
|
||||
struct_VERTEX_FORMAT_P3F_COL4UB_TEX2F_TEX2F *VBPtr_13;
|
||||
};
|
||||
|
||||
//==================================================================
|
||||
|
||||
#define MAX_DYNVBS 8
|
||||
|
||||
struct SMFenceBufs
|
||||
{
|
||||
uint m_Fence;
|
||||
UPipeVertex Ptr;
|
||||
CVertexBuffer *m_pVBDyn;
|
||||
int m_nOffs;
|
||||
int m_nCount;
|
||||
};
|
||||
|
||||
//==================================================================
|
||||
|
||||
#define MAX_PORTAL_RECURSES 4
|
||||
#define MAX_WARPSURFS 64
|
||||
#define MAX_WARPS 8
|
||||
|
||||
struct SWarpSurf
|
||||
{
|
||||
CRendElement *srf;
|
||||
int nobj;
|
||||
SShader *Shader;
|
||||
SRenderShaderResources *ShaderRes;
|
||||
};
|
||||
|
||||
struct STWarpZone
|
||||
{
|
||||
Plane plane;
|
||||
int numSrf;
|
||||
SWarpSurf Surfs[MAX_WARPSURFS];
|
||||
};
|
||||
|
||||
//==================================================================
|
||||
// StencilStates
|
||||
|
||||
#define FSS_STENCFUNC_ALWAYS 0x0
|
||||
#define FSS_STENCFUNC_NEVER 0x1
|
||||
#define FSS_STENCFUNC_LESS 0x2
|
||||
#define FSS_STENCFUNC_LEQUAL 0x3
|
||||
#define FSS_STENCFUNC_GREATER 0x4
|
||||
#define FSS_STENCFUNC_GEQUAL 0x5
|
||||
#define FSS_STENCFUNC_EQUAL 0x6
|
||||
#define FSS_STENCFUNC_NOTEQUAL 0x7
|
||||
#define FSS_STENCFUNC_MASK 0x7
|
||||
|
||||
#define FSS_STENCIL_TWOSIDED 0x8
|
||||
|
||||
#define FSS_CCW_SHIFT 16
|
||||
|
||||
#define FSS_STENCOP_KEEP 0x0
|
||||
#define FSS_STENCOP_REPLACE 0x1
|
||||
#define FSS_STENCOP_INCR 0x2
|
||||
#define FSS_STENCOP_DECR 0x3
|
||||
#define FSS_STENCOP_ZERO 0x4
|
||||
#define FSS_STENCOP_INCR_WRAP 0x5
|
||||
#define FSS_STENCOP_DECR_WRAP 0x6
|
||||
|
||||
#define FSS_STENCFAIL_SHIFT 4
|
||||
#define FSS_STENCFAIL_MASK (0x7 << FSS_STENCFAIL_SHIFT)
|
||||
|
||||
#define FSS_STENCZFAIL_SHIFT 8
|
||||
#define FSS_STENCZFAIL_MASK (0x7 << FSS_STENCZFAIL_SHIFT)
|
||||
|
||||
#define FSS_STENCPASS_SHIFT 12
|
||||
#define FSS_STENCPASS_MASK (0x7 << FSS_STENCPASS_SHIFT)
|
||||
|
||||
#define STENC_FUNC(op) (op)
|
||||
#define STENC_CCW_FUNC(op) (op << FSS_CCW_SHIFT)
|
||||
#define STENCOP_FAIL(op) (op << FSS_STENCFAIL_SHIFT)
|
||||
#define STENCOP_ZFAIL(op) (op << FSS_STENCZFAIL_SHIFT)
|
||||
#define STENCOP_PASS(op) (op << FSS_STENCPASS_SHIFT)
|
||||
#define STENCOP_CCW_FAIL(op) (op << (FSS_STENCFAIL_SHIFT+FSS_CCW_SHIFT))
|
||||
#define STENCOP_CCW_ZFAIL(op) (op << (FSS_STENCZFAIL_SHIFT+FSS_CCW_SHIFT))
|
||||
#define STENCOP_CCW_PASS(op) (op << (FSS_STENCPASS_SHIFT+FSS_CCW_SHIFT))
|
||||
|
||||
//==================================================================
|
||||
|
||||
#ifdef DIRECT3D9
|
||||
#include <d3d9.h>
|
||||
#endif
|
||||
|
||||
#if defined (DIRECT3D8) || defined (DIRECT3D9)
|
||||
template <class IndexType> class DynamicIB;
|
||||
|
||||
struct SD3DFixedVShader
|
||||
{
|
||||
#ifdef DIRECT3D8
|
||||
TArray<DWORD> m_Declaration;
|
||||
#elif DIRECT3D9
|
||||
TArray<D3DVERTEXELEMENT9> m_Declaration;
|
||||
LPDIRECT3DVERTEXDECLARATION9 m_pDeclaration;
|
||||
#endif
|
||||
DWORD m_Handle;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
#if defined (DIRECT3D8) || defined (DIRECT3D9)
|
||||
#define MAX_DYNVBS 8
|
||||
template < class VertexType > class DynamicVB;
|
||||
union UDynamicVB
|
||||
{
|
||||
DynamicVB <Vec3d> *VBPtr_0;
|
||||
DynamicVB <struct_VERTEX_FORMAT_P3F> *VBPtr_1;
|
||||
DynamicVB <struct_VERTEX_FORMAT_P3F_COL4UB> *VBPtr_2;
|
||||
DynamicVB <struct_VERTEX_FORMAT_P3F_TEX2F> *VBPtr_3;
|
||||
DynamicVB <struct_VERTEX_FORMAT_P3F_COL4UB_TEX2F> *VBPtr_4;
|
||||
DynamicVB <struct_VERTEX_FORMAT_TRP3F_COL4UB_TEX2F> *VBPtr_5;
|
||||
DynamicVB <struct_VERTEX_FORMAT_P3F_COL4UB_COL4UB> *VBPtr_6;
|
||||
DynamicVB <struct_VERTEX_FORMAT_P3F_N> *VBPtr_7;
|
||||
DynamicVB <struct_VERTEX_FORMAT_P3F_N_COL4UB> *VBPtr_8;
|
||||
DynamicVB <struct_VERTEX_FORMAT_P3F_N_TEX2F> *VBPtr_9;
|
||||
DynamicVB <struct_VERTEX_FORMAT_P3F_N_COL4UB_TEX2F> *VBPtr_10;
|
||||
DynamicVB <SPipTangents> *VBPtr_11;
|
||||
DynamicVB <struct_VERTEX_FORMAT_TEX2F> *VBPtr_12;
|
||||
DynamicVB <struct_VERTEX_FORMAT_P3F_COL4UB_TEX2F_TEX2F> *VBPtr_13;
|
||||
};
|
||||
struct SVertexDeclaration
|
||||
{
|
||||
int StreamMask;
|
||||
int VertFormat;
|
||||
int InstMask;
|
||||
TArray<D3DVERTEXELEMENT9> m_Declaration;
|
||||
LPDIRECT3DVERTEXDECLARATION9 m_pDeclaration;
|
||||
};
|
||||
#endif
|
||||
|
||||
struct SProfInfo
|
||||
{
|
||||
int NumPolys;
|
||||
SShader *ef;
|
||||
double Time;
|
||||
int m_nItems;
|
||||
};
|
||||
|
||||
struct SVrect
|
||||
{
|
||||
int x,y,width,height;
|
||||
};
|
||||
|
||||
struct SPlane
|
||||
{
|
||||
byte m_Type;
|
||||
byte m_SignBits;
|
||||
Vec3d m_Normal;
|
||||
float m_Dist;
|
||||
void Init()
|
||||
{
|
||||
if ( m_Normal[0] == 1.0f )
|
||||
m_Type = PLANE_X;
|
||||
if ( m_Normal[1] == 1.0f )
|
||||
m_Type = PLANE_Y;
|
||||
if ( m_Normal[2] == 1.0f )
|
||||
m_Type = PLANE_Z;
|
||||
else
|
||||
m_Type = PLANE_NON_AXIAL;
|
||||
|
||||
// for fast box on planeside test
|
||||
int bits = 0;
|
||||
int j;
|
||||
for (j=0; j<3; j++)
|
||||
{
|
||||
if (m_Normal[j] < 0)
|
||||
bits |= 1<<j;
|
||||
}
|
||||
m_SignBits = bits;
|
||||
}
|
||||
};
|
||||
|
||||
struct SStatItem
|
||||
{
|
||||
int m_Nums;
|
||||
double m_fTime;
|
||||
};
|
||||
|
||||
#define STARTPROFILE(Item) { ticks(Item.m_fTime); Item.m_Nums++; }
|
||||
#define ENDPROFILE(Item) { unticks(Item.m_fTime); }
|
||||
|
||||
struct SPipeStat
|
||||
{
|
||||
int m_NumRendBatches;
|
||||
int m_NumRendItems;
|
||||
int m_NumRendObjects;
|
||||
int m_NumDrawCalls;
|
||||
int m_NumTextChanges;
|
||||
int m_NumStateChanges;
|
||||
int m_NumRendSkinnedObjects;
|
||||
int m_NumLitShaders;
|
||||
int m_NumVShadChanges;
|
||||
int m_NumPShadChanges;
|
||||
int m_NumVShaders;
|
||||
int m_NumPShaders;
|
||||
int m_NumTextures;
|
||||
int m_TexturesSize;
|
||||
int m_MeshUpdateBytes;
|
||||
float m_fOverdraw;
|
||||
float m_fSkinningTime;
|
||||
float m_fPreprocessTime;
|
||||
float m_fFlushTime;
|
||||
float m_fTexUploadTime;
|
||||
float m_fOcclusionTime;
|
||||
int m_NumNotFinishFences;
|
||||
int m_NumFences;
|
||||
float m_fEnvCMapUpdateTime;
|
||||
};
|
||||
|
||||
struct STexStageInfo
|
||||
{
|
||||
int nMipFilter;
|
||||
byte Repeat;
|
||||
byte Projected;
|
||||
int MagFilter;
|
||||
int MinFilter;
|
||||
int Anisotropic;
|
||||
int TCIndex;
|
||||
// Per-stage color operations
|
||||
byte m_CO;
|
||||
byte m_CA;
|
||||
byte m_AO;
|
||||
byte m_AA;
|
||||
#ifndef _XBOX
|
||||
int Palette;
|
||||
#else
|
||||
void* Palette;
|
||||
#endif
|
||||
STexPic *Texture;
|
||||
STexStageInfo()
|
||||
{
|
||||
Flush();
|
||||
}
|
||||
void Flush()
|
||||
{
|
||||
TCIndex = -1;
|
||||
nMipFilter = -1;
|
||||
Repeat = (bool)-1;
|
||||
Anisotropic = 255;
|
||||
Texture = NULL;
|
||||
#ifndef _XBOX
|
||||
Palette = -1;
|
||||
#else
|
||||
Palette = NULL;
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
struct SSplash
|
||||
{
|
||||
int m_Id;
|
||||
Vec3d m_Pos;
|
||||
float m_fForce;
|
||||
eSplashType m_eType;
|
||||
float m_fStartTime;
|
||||
float m_fLastTime;
|
||||
float m_fCurRadius;
|
||||
};
|
||||
|
||||
// m_RP.m_Flags
|
||||
#define RBF_2D 0x10
|
||||
#define RBF_USEFENCES 0x100
|
||||
|
||||
#define RBF_MODIF_TC 0x1000
|
||||
#define RBF_MODIF_VERT 0x2000
|
||||
#define RBF_MODIF_COL 0x4000
|
||||
#define RBF_MODIF_MASK 0xf000
|
||||
|
||||
#define RBF_NEAREST 0x10000
|
||||
#define RBF_3D 0x40000
|
||||
#define RBF_SHOWLINES 0x80000
|
||||
|
||||
// m_RP.m_PersFlags
|
||||
#define RBPF_DONTDRAWSUN 1
|
||||
#define RBPF_SETCLIPPLANE 2
|
||||
#define RBPF_USESTREAM1 4
|
||||
#define RBPF_USESTREAM2 8
|
||||
#define RBPF_MEASUREOVERDRAW 0x10
|
||||
#define RBPF_DONTDRAWNEAREST 0x20
|
||||
#define RBPF_DRAWPORTAL 0x40
|
||||
#define RBPF_DRAWMIRROR 0x80
|
||||
#define RBPF_NOSHINE 0x100
|
||||
#define RBPF_NOCLEARBUF 0x400
|
||||
#define RBPF_DRAWNIGHTMAP 0x800
|
||||
#define RBPF_DRAWHEATMAP 0x1000
|
||||
#define RBPF_DRAWMOTIONMAP 0x2000
|
||||
#define RBPF_DRAWSCREENMAP 0x4000
|
||||
#define RBPF_MATRIXNOTLOADED 0x8000
|
||||
|
||||
#define RBPF_DRAWSCREENTEXMAP 0x10000 // tiago: added
|
||||
#define RBPF_ONLYREFRACTED 0x20000
|
||||
#define RBPF_IGNORERENDERING 0x40000
|
||||
#define RBPF_IGNOREREFRACTED 0x80000
|
||||
|
||||
#define RBPF_PS1WASSET 0x100000
|
||||
#define RBPF_PS2WASSET 0x200000
|
||||
#define RBPF_VSWASSET 0x400000
|
||||
#define RBPF_TSWASSET 0x800000
|
||||
|
||||
#define RBPF_PS1NEEDSET 0x1000000
|
||||
#define RBPF_PS2NEEDSET 0x2000000
|
||||
#define RBPF_VSNEEDSET 0x4000000
|
||||
#define RBPF_TSNEEDSET 0x8000000
|
||||
|
||||
#define RBPF_WASWORLDSPACE 0x10000000
|
||||
#define RBPF_MAKESPRITE 0x20000000
|
||||
#define RBPF_MULTILIGHTS 0x40000000
|
||||
#define RBPF_HDR 0x80000000
|
||||
|
||||
// m_RP.m_FlagsModificators
|
||||
#define RBMF_TANGENTSUSED SHPF_TANGENTS
|
||||
#define RBMF_LMTCUSED SHPF_LMTC
|
||||
#define RBMF_BENDINFOUSED 4
|
||||
#define RBMF_OBJUSESROTATE 8
|
||||
|
||||
// Texture transform flags (4)
|
||||
#define RBMF_TCM0 0x100
|
||||
// Object linear texgen flags (4)
|
||||
#define RBMF_TCGOL0 0x1000
|
||||
// Reflection map texgen flags (4)
|
||||
#define RBMF_TCGRM0 0x10000
|
||||
// Normal map texgen flags (4)
|
||||
#define RBMF_TCGNM0 0x100000
|
||||
// Normal map texgen flags (4)
|
||||
#define RBMF_TCGSM0 0x1000000
|
||||
|
||||
#define RBMF_NOUPDATE 0x10000000
|
||||
|
||||
#define RBMF_TCG 0xffff000
|
||||
#define RBMF_TCM 0xf00
|
||||
|
||||
|
||||
// m_RP.m_FlagsPerFlush
|
||||
#define RBSI_BLEND 0x1
|
||||
#define RBSI_NOCULL 0x2
|
||||
#define RBSI_WASDEPTHWRITE 0x4
|
||||
#define RBSI_DRAWAS2D 0x8
|
||||
#define RBSI_ALPHABLEND 0x10
|
||||
#define RBSI_ALPHATEST 0x20
|
||||
#define RBSI_DEPTHWRITE 0x40
|
||||
#define RBSI_FOGVOLUME 0x80
|
||||
#define RBSI_TEXSTATE 0x100
|
||||
#define RBSI_ALPHAGEN 0x200
|
||||
#define RBSI_RGBGEN 0x400
|
||||
#define RBSI_COLORMASK 0x800
|
||||
#define RBSI_INDEXSTREAM 0x1000
|
||||
#define RBSI_USEVP 0x2000
|
||||
#define RBSI_DEPTHTEST 0x4000
|
||||
#define RBSI_DEPTHFUNC 0x8000
|
||||
#define RBSI_SHADOWPASS 0x10000
|
||||
#define RBSI_STENCIL 0x20000
|
||||
#define RBSI_GLOBALRGB 0x40000
|
||||
#define RBSI_GLOBALALPHA 0x80000
|
||||
#define RBSI_VERTSMERGED 0x100000
|
||||
#define RBSI_LMTCMERGED 0x200000
|
||||
#define RBSI_TANGSMERGED 0x400000
|
||||
#define RBSI_FURPASS 0x800000
|
||||
#define RBSI_MERGED 0x1000000
|
||||
#define RBSI_USE_LM 0x2000000
|
||||
#define RBSI_USE_HDRLM 0x4000000
|
||||
#define RBSI_USE_3DC 0x8000000
|
||||
#define RBSI_USE_3DC_A 0x10000000
|
||||
#define RBSI_USE_SPECANTIALIAS 0x20000000
|
||||
|
||||
// m_RP.m_HWCurState
|
||||
// m_RP.m_HWPrevState
|
||||
#define RPHW_VPROGRAM 1
|
||||
#define RPHW_RCOMBINER 2
|
||||
#define RPHW_PSHADER 4
|
||||
|
||||
// m_RP.m_ShaderLightMask
|
||||
#define SLMF_DIRECT 0
|
||||
#define SLMF_POINT 1
|
||||
#define SLMF_PROJECTED 2
|
||||
#define SLMF_TYPE_MASK (SLMF_POINT | SLMF_PROJECTED)
|
||||
#define SLMF_ONLYSPEC 4
|
||||
#define SLMF_SPECOCCLUSION 8
|
||||
#define SLMF_LTYPE_SHIFT 16
|
||||
|
||||
struct SLightPass
|
||||
{
|
||||
CDLight *pLights[4];
|
||||
int nLights;
|
||||
int nProjectors;
|
||||
};
|
||||
|
||||
// Render status structure
|
||||
struct SRenderPipeline
|
||||
{
|
||||
SShader *m_pShader;
|
||||
CCObject *m_pCurObject;
|
||||
SShader *m_pStateShader;
|
||||
CRendElement *m_pRE;
|
||||
SRenderShaderResources *m_pShaderResources;
|
||||
CCObject *m_pPrevObject;
|
||||
#ifdef PIPE_USE_INSTANCING
|
||||
TArray<CCObject *> m_MergedObjects;
|
||||
TArray<CCObject *> m_RotatedMergedObjects;
|
||||
TArray<CCObject *> m_NonRotatedMergedObjects;
|
||||
#endif
|
||||
int m_FrameGTC;
|
||||
SGenTC *m_pGTC[MAX_TMU];
|
||||
STexStageInfo m_TexStages[MAX_TMU];
|
||||
|
||||
short m_TransformFrame;
|
||||
UCol m_CurGlobalColor;
|
||||
UCol m_NeedGlobalColor;
|
||||
|
||||
SEvalFuncs *m_pCurFuncs;
|
||||
SEvalFuncs_RE m_EvalFuncs_RE;
|
||||
SEvalFuncs_C m_EvalFuncs_C;
|
||||
|
||||
float m_RealTime;
|
||||
|
||||
int m_ObjFlags;
|
||||
int m_Flags; // Reset on start pipeline
|
||||
int m_PersFlags; // Never reset
|
||||
int m_FlagsPerFlush;
|
||||
int m_FlagsModificators;
|
||||
int m_FrameObject;
|
||||
float m_fCurSpecShininess;
|
||||
CName m_Name_SpecularExp;
|
||||
int m_ClipPlaneEnabled;
|
||||
CCObject *m_pIgnoreObject;
|
||||
|
||||
bool m_bStartPipeline;
|
||||
bool m_bDrawToTexture;
|
||||
int m_MirrorClipSide;
|
||||
int m_RenderFrame;
|
||||
int m_RendPass;
|
||||
int m_ResourceState;
|
||||
|
||||
SEnvTexture *m_pCurEnvTexture;
|
||||
|
||||
int m_StatNumLights;
|
||||
int m_StatNumLightPasses;
|
||||
int m_StatNumPasses;
|
||||
int m_StatLightMask;
|
||||
char *m_ExcludeShader;
|
||||
char *m_ShowOnlyShader;
|
||||
|
||||
TArray<SProfInfo> m_Profile;
|
||||
|
||||
Vec3d m_ViewOrg;
|
||||
|
||||
int m_CurrentVLightFlags;
|
||||
int m_EnabledVLightFlags;
|
||||
int m_EnabledVLights;
|
||||
int m_CurrentVLights;
|
||||
|
||||
int m_ShaderLightMask;
|
||||
int m_DynLMask;
|
||||
CDLight *m_pCurLight;
|
||||
int m_nCurLight;
|
||||
int m_nCurLightPass;
|
||||
int m_NumActiveDLights;
|
||||
CDLight *m_pActiveDLights[16];
|
||||
int m_nCurLightParam;
|
||||
SLightPass m_LPasses[32];
|
||||
|
||||
SLightMaterial *m_pCurLightMaterial;
|
||||
SLightMaterial m_DefLightMaterial;
|
||||
|
||||
SLightIndicies *m_pCurLightIndices;
|
||||
SLightIndicies m_FakeLightIndices;
|
||||
|
||||
UPipeVertex m_Ptr;
|
||||
UPipeVertex m_NextPtr;
|
||||
int m_Stride;
|
||||
int m_OffsT;
|
||||
int m_OffsD;
|
||||
int m_OffsN;
|
||||
int m_CurVFormat;
|
||||
TArray<CREOcLeaf *> m_MergedREs;
|
||||
TArray<CCObject *> m_MergedObjs;
|
||||
|
||||
float m_fLastWaterFOVUpdate;
|
||||
Vec3d m_LastWaterAngleUpdate;
|
||||
Vec3d m_LastWaterPosUpdate;
|
||||
float m_fLastWaterUpdate;
|
||||
|
||||
#if defined (DIRECT3D8) || defined (DIRECT3D9)
|
||||
UDynamicVB m_VBs[MAX_DYNVBS];
|
||||
DynamicIB <ushort> *m_IndexBuf;
|
||||
UDynamicVB m_MergedStreams[3];
|
||||
int m_nStreamOffset[3];
|
||||
SD3DFixedVShader m_D3DFixedPipeline[8][VERTEX_FORMAT_NUMS];
|
||||
DynamicVB <vec4_t> *m_VB_Inst;
|
||||
TArray<SVertexDeclaration *>m_CustomVD;
|
||||
#endif
|
||||
ushort *m_RendIndices;
|
||||
ushort *m_SysRendIndices;
|
||||
int m_CurVB;
|
||||
#ifdef OPENGL
|
||||
int m_NumFences;
|
||||
int m_CurFence;
|
||||
int m_FenceCount;
|
||||
SMFenceBufs m_VidBufs[MAX_DYNVBS];
|
||||
SVertexStream m_IBDyn;
|
||||
int m_IBDynOffs;
|
||||
int m_IBDynSize;
|
||||
int m_MergedStreams[3];
|
||||
int m_nStreamOffset[3];
|
||||
#endif
|
||||
|
||||
int m_RendNumIndices;
|
||||
int m_RendNumVerts;
|
||||
int m_FirstIndex;
|
||||
int m_FirstVertex;
|
||||
int m_BaseVertex;
|
||||
|
||||
int m_VFormatsMerge[VERTEX_FORMAT_NUMS][VERTEX_FORMAT_NUMS];
|
||||
|
||||
ECull m_eCull;
|
||||
|
||||
void (*m_pRenderFunc)();
|
||||
|
||||
SMFog *m_pFogVolume;
|
||||
|
||||
bool m_bClipPlaneRefract;
|
||||
SPlane m_CurClipPlane;
|
||||
SPlane m_CurClipPlaneCull;
|
||||
int m_ClipPlaneWasOverrided;
|
||||
int m_nClipPlaneTMU;
|
||||
|
||||
int m_FT;
|
||||
|
||||
SEfResTexture *m_ShaderTexResources[MAX_TMU];
|
||||
|
||||
CVProgram *m_CurVP;
|
||||
CPShader *m_CurPS;
|
||||
CVProgram *m_LastVP;
|
||||
|
||||
CPShader *m_RCSun;
|
||||
CPShader *m_RCDetail;
|
||||
CPShader *m_RCSprites;
|
||||
CPShader *m_RCSprites_Heat;
|
||||
CPShader *m_RCSprites_FV;
|
||||
CVProgram *m_VPDetail;
|
||||
CVProgram *m_VPTransformTexture;
|
||||
CVProgram *m_VPTexShadow;
|
||||
CVProgram *m_VPFog;
|
||||
CPShader *m_RCFog;
|
||||
CPShader *m_RCTexShadow;
|
||||
CVProgram *m_VPPlantBendingSpr;
|
||||
CVProgram *m_VPPlantBendingSpr_FV;
|
||||
CPShader *m_RCBlur;
|
||||
CVProgram *m_VPBlur;
|
||||
CVProgram *m_VPSubSurfaceScatering;
|
||||
CPShader *m_RCSubSurfaceScatering;
|
||||
CVProgram *m_VPSubSurfaceScatering_pp;
|
||||
CPShader *m_RCSubSurfaceScatering_pp;
|
||||
CVProgram *m_VPFur_NormGen;
|
||||
CVProgram *m_VPFur_OffsGen;
|
||||
CPShader *m_RCFur_NormGen;
|
||||
CPShader *m_RCFur_OffsGen;
|
||||
|
||||
CVProgram *m_VP_BaseCol;
|
||||
|
||||
CPShader *m_PS_HDRTemp;
|
||||
CPShader *m_PS_HDRDownScale2x2;
|
||||
CPShader *m_PS_HDRDownScale4x4;
|
||||
CPShader *m_PS_HDRDownScale4x4_RG;
|
||||
CPShader *m_PS_HDRDownScale4x4_BA;
|
||||
CPShader *m_PS_HDRSampleAvgLum;
|
||||
CPShader *m_PS_HDRResampleAvgLum;
|
||||
CPShader *m_PS_HDRResampleAvgLumExp;
|
||||
CPShader *m_PS_HDRCalcAdaptedLum;
|
||||
CPShader *m_PS_HDRBrightPassFilter;
|
||||
CPShader *m_PS_HDRGaussBlur5x5;
|
||||
CPShader *m_PS_HDRGaussBlur5x5_Bilinear;
|
||||
CPShader *m_PS_HDRBloom;
|
||||
CPShader *m_PS_HDRStar;
|
||||
CPShader *m_PS_HDRStar_MRT;
|
||||
CPShader *m_PS_HDRFinalScene;
|
||||
CPShader *m_PS_HDRMergeTextures[8];
|
||||
CPShader *m_PS_HDR_ShowR;
|
||||
CPShader *m_PS_HDR_ShowRG_MRT;
|
||||
CPShader *m_PS_HDR_Base;
|
||||
CPShader *m_PS_HDR_BaseCol;
|
||||
CPShader *m_PS_HDR_BaseCol_FV;
|
||||
CPShader *m_PS_HDR_AmbBase;
|
||||
CPShader *m_PS_HDR_AmbBaseCol;
|
||||
CPShader *m_PS_HDR_AmbBaseConst;
|
||||
CPShader *m_PS_HDR_BaseConst;
|
||||
CPShader *m_PS_HDR_AmbBaseCol_FV;
|
||||
CPShader *m_PS_HDR_DrawFlare;
|
||||
CPShader *m_PS_HDR_SkyFake;
|
||||
CPShader *m_PS_HDR_Sky;
|
||||
CPShader *m_PS_HDR_ClearScreen;
|
||||
CPShader *m_PS_GaussBlurSep;
|
||||
CVProgram *m_VS_GaussBlurSep;
|
||||
|
||||
SShaderPass *m_CurrPass;
|
||||
|
||||
int m_nCurStartCaster;
|
||||
|
||||
int m_Frame;
|
||||
int m_FillFrame;
|
||||
|
||||
SShaderTechnique *m_pCurTechnique;
|
||||
float m_fDistanceToCameraSquared;
|
||||
float m_fCurOpacity;
|
||||
Matrix44 m_WaterProjMatrix;
|
||||
Vec3d m_CamVecs[3];
|
||||
Vec3d m_OSCameraPos;
|
||||
|
||||
SPipeStat m_PS;
|
||||
|
||||
Vec3d m_SunDir;
|
||||
CFColor m_SunColor;
|
||||
|
||||
int m_nLMStage;
|
||||
INT_PTR m_nCurBufferID; // For ATI vertex object support //AMD Port
|
||||
int m_nCurBufferOffset; // For ATI vertex object support
|
||||
|
||||
int m_MaxVerts;
|
||||
int m_MaxTris;
|
||||
|
||||
int m_RECustomTexBind[8];
|
||||
CFColor m_REColor;
|
||||
float m_RECustomData[64];
|
||||
|
||||
STexPic *m_AnimTexs[4][32];
|
||||
int m_CurLayerNum;
|
||||
|
||||
Vec3d m_Center;
|
||||
|
||||
CCamera m_PrevCamera;
|
||||
|
||||
//=========================================================================
|
||||
// Per vertex attributes
|
||||
Vec3d *m_pBinormals;
|
||||
Vec3d *m_pTangents;
|
||||
Vec3d *m_pTNormals;
|
||||
Vec3d *m_pLightVectors[4];
|
||||
Vec3d *m_pHalfAngleVectors[4];
|
||||
Vec3d *m_pAttenuation;
|
||||
Vec3d *m_pLAttenSpec0;
|
||||
Vec3d *m_pLAttenSpec1;
|
||||
|
||||
SMRendTexVert *m_pBaseTexCoordPointer;
|
||||
SMRendTexVert *m_pLMTexCoordPointer;
|
||||
float *m_pFogVertValues;
|
||||
bvec4 *m_pClientColors;
|
||||
|
||||
//===================================================================
|
||||
// Input render data
|
||||
TArray<SSplash> m_Splashes;
|
||||
int m_NumVisObjects;
|
||||
CCObject **m_VisObjects;
|
||||
TArray<CDLight *> m_DLights[8];
|
||||
TArray <CCObject *> m_RejectedObjects;
|
||||
TArray <CCObject *> m_Objects;
|
||||
TArray <CCObject *> m_TempObjects;
|
||||
TArray<SMFog> m_FogVolumes;
|
||||
CCObject *m_ObjectsPool;
|
||||
int m_nNumObjectsInPool;
|
||||
|
||||
//================================================================
|
||||
// Portals support
|
||||
float m_fMinDepthRange;
|
||||
float m_fMaxDepthRange;
|
||||
|
||||
int m_RecurseLevel;
|
||||
int m_WasPortals;
|
||||
int m_CurPortal;
|
||||
STWarpZone *m_CurWarp;
|
||||
|
||||
//================================================================
|
||||
// Sprites
|
||||
TArray<SRefSprite> m_Sprites;
|
||||
|
||||
//================================================================
|
||||
// Temporary mesh
|
||||
TArray<class CRETempMesh *> m_TempMeshes[2];
|
||||
TArray<class CRETempMesh *> *m_CurTempMeshes;
|
||||
|
||||
//================================================================
|
||||
// Glare Heat and Night
|
||||
class CREGlare *m_pREGlare;
|
||||
class CREHDRProcess *m_pREHDR;
|
||||
int m_HeatSize;
|
||||
int m_NightSize;
|
||||
int m_GlareSize;
|
||||
int m_RainMapSize;
|
||||
int m_FlashBangSize;
|
||||
|
||||
//=================================================================
|
||||
// WaveForm tables
|
||||
float m_tSinTable[1024];
|
||||
float m_tHalfSinTable[1024];
|
||||
float m_tCosTable[1024];
|
||||
float m_tSquareTable[1024];
|
||||
float m_tTriTable[1024];
|
||||
float m_tSawtoothTable[1024];
|
||||
float m_tInvSawtoothTable[1024];
|
||||
float m_tHillTable[1024];
|
||||
|
||||
float m_tRandFloats[256];
|
||||
byte m_tRandBytes[256];
|
||||
};
|
||||
|
||||
#define MAX_REND_OBJECTS 4096
|
||||
|
||||
#endif // __RENDERPIPELINE_H__
|
||||
Reference in New Issue
Block a user