189 lines
5.6 KiB
C++
189 lines
5.6 KiB
C++
#pragma once
|
|
|
|
/// @brief ViewPort의 게임관련 인터페이스( 툴 말구 )
|
|
|
|
#include "KViewport.h"
|
|
#include <toolkit/XFlag.h>
|
|
#include <dump/XException.h>
|
|
#include <toolkit/khash.h>
|
|
#include "TerrainPrimitiveFor4Stage.h"
|
|
|
|
class K3DVertexBuffer;
|
|
class KMeshPrimitive;
|
|
class CTerrainPrimitive;
|
|
|
|
class SRenderTargetContainer
|
|
{
|
|
public:
|
|
virtual K3DRenderTarget * GetRenderTarget(int index, void * pr) { return NULL; }
|
|
};
|
|
|
|
|
|
// DP debug용
|
|
//#define _DEBUG_DPCOUNT
|
|
#ifdef _DEBUG_DPCOUNT
|
|
void __startOneFrame();
|
|
void __endOneFrame();
|
|
void __startRenderToViewport(LPCSTR viewportName);
|
|
void __addRenderItem(LPCSTR name,int DP, int face, LARGE_INTEGER counter1, LARGE_INTEGER counter2);
|
|
|
|
#define START_ONE_FRAME() __startOneFrame()
|
|
#define END_ONE_FRAME() __endOneFrame()
|
|
|
|
#define START_RENDER_VIEWPORT(name) __startRenderToViewport(name)
|
|
|
|
#define START_DPCOUNT(__name)\
|
|
LARGE_INTEGER __counter; QueryPerformanceCounter(&__counter);\
|
|
LPCSTR __outputname = __name;\
|
|
K3DRenderDeviceDX* __pDXDev = static_cast<K3DRenderDeviceDX*>(m_dev);\
|
|
int __totalDP = __pDXDev->GetDPCount();\
|
|
int __totalFace = __pDXDev->GetPolyCount()
|
|
|
|
#define END_DPCOUNT()\
|
|
LARGE_INTEGER __counter2;\
|
|
QueryPerformanceCounter(&__counter2);\
|
|
__addRenderItem(__outputname, __pDXDev->GetDPCount() - __totalDP, __pDXDev->GetPolyCount() - __totalFace, __counter,__counter2);
|
|
|
|
#define START_PROFILE_JOB(__name)\
|
|
LARGE_INTEGER __counter; QueryPerformanceCounter(&__counter);\
|
|
LPCSTR __outputname = __name
|
|
|
|
#define END_PROFILE_JOB()\
|
|
LARGE_INTEGER __counter2;\
|
|
QueryPerformanceCounter(&__counter2);\
|
|
__addRenderItem(__outputname, 1,0, __counter, __counter2);
|
|
|
|
|
|
#else
|
|
#define START_ONE_FRAME()
|
|
#define END_ONE_FRAME()
|
|
#define START_RENDER_VIEWPORT(name)
|
|
#define START_DPCOUNT(name)
|
|
#define END_DPCOUNT()
|
|
#define START_PROFILE_JOB(name)
|
|
#define END_PROFILE_JOB()
|
|
#endif
|
|
|
|
|
|
|
|
class SViewPort : public KViewportObject
|
|
{
|
|
public:
|
|
|
|
SViewPort( DWORD attr, bool bClearColorBuffer = true, bool bClearDepthBuffer = true );
|
|
virtual ~SViewPort();
|
|
|
|
virtual void Initilaize( K3DRenderDevice *dev, const KViewportStruct &viewarea, float nearClip, float farClip );
|
|
|
|
virtual void Register( K3DPrimitive *pr, DWORD flag );
|
|
virtual void Render( K3DRenderTarget *pRT, DWORD flag = 0, bool bClearRegister = true );
|
|
|
|
void BeginRender();
|
|
void EndRender(bool bClearRegister);
|
|
virtual void Render( bool bClearRegister = true, bool bSetRenderTarget = true );
|
|
virtual void ClearRegisteredList();
|
|
|
|
//쉐도우 맵 관련
|
|
//bool InitShadow();
|
|
|
|
virtual void SetRenderFlag( int nFlag );
|
|
|
|
//#ifndef NDEBUG
|
|
// void SetDebugMode( bool bDebugMode ) { m_bDebugMode = bDebugMode; }
|
|
//#endif
|
|
|
|
//void SetRenderBumpMapMode( bool bRender );
|
|
//bool GetRenderBumpMapMode();
|
|
|
|
void SetSelfShadowAmbientFactor( float fFactor );
|
|
|
|
protected:
|
|
|
|
//void RenderShadowViewPort();
|
|
void RenderSky();
|
|
void RenderCloud();
|
|
void RenderLightning(); //<! [sonador][2007.04.11] Rendering method of SGameLightningStroke
|
|
void RenderWeather(); //<! [sonador][2007.03.19] Rendering method of SGameWeather
|
|
void RenderTerrain( bool bCheckOcclusionCull );
|
|
void RenderTerrainShadow(SRenderTargetContainer *cont1, SRenderTargetContainer *cont2);
|
|
//void RenderBuilding(SRenderTargetContainer *cont1, SRenderTargetContainer *cont2);
|
|
//void RenderAlphaBuilding(SRenderTargetContainer *cont1, SRenderTargetContainer *cont2);
|
|
|
|
void RenderBranch(bool renderTransparentOrOpaque=false); // true : render transparent only, false : render opaque only
|
|
void RenderFrond(bool renderTransparentOrOpaque=false);
|
|
void RenderLeaf(bool renderTransparentOrOpaque=false);
|
|
void RenderTreeBillboard();
|
|
void RenderSpeedGrass();
|
|
//void RenderPathEffect();
|
|
void RenderQuadPrimitive();
|
|
void RenderLinePrimitive();
|
|
void RenderPolyLinePrimitive();
|
|
|
|
void RenderPrList( vec_rendermesh& renderlist, SRenderTargetContainer *cont1, SRenderTargetContainer *cont2);
|
|
void RenderPrAlphaList( vec_rendermesh& renderlist, SRenderTargetContainer *cont1, SRenderTargetContainer *cont2);
|
|
void RenderPrAlphaList(SRenderTargetContainer *cont1, SRenderTargetContainer *cont2, KCustomVector< const RENDER_MESHEX* >& vMesh, K3DVector & vecCam, bool bEnableAdditive );
|
|
|
|
void RenderPrAdditiveList(SRenderTargetContainer *cont1, SRenderTargetContainer *cont2);
|
|
|
|
void RenderBliiboardList();
|
|
void RenderAdditiveBliiboard();
|
|
|
|
void RenderLensflare();
|
|
void RenderSprite();
|
|
void RenderWirePrimitive();
|
|
|
|
void RenderHighQualityWater();
|
|
|
|
void SetSpeedGrassShaderConstants();
|
|
|
|
virtual bool DrawWater() { assert(0); return false; }
|
|
|
|
void SetOldBlendMode( int nBlendMode, bool bReset = false );
|
|
void SetOldBlendFlag( int nFlag = 0 );
|
|
protected:
|
|
// float m_afLighting[12];
|
|
XFlag< int > m_nRenderFlag; ///< int 1개 크기의 플래그 생성.
|
|
|
|
//#ifndef NDEBUG
|
|
// bool m_bDebugMode;
|
|
//#endif
|
|
|
|
bool m_bRenderSelfShadow;
|
|
//bool m_bRenderBumpMap;
|
|
|
|
float m_fSelfShadowAmbientFactor;
|
|
|
|
struct TerrainLess
|
|
{
|
|
bool operator()( CTerrainPrimitiveFor4Stage& a, CTerrainPrimitiveFor4Stage& b )
|
|
{
|
|
return ( a > b );
|
|
}
|
|
bool operator()( CTerrainPrimitiveFor4Stage* a, CTerrainPrimitiveFor4Stage* b )
|
|
{
|
|
return ( a->m_fLengthByCamera < b->m_fLengthByCamera );
|
|
return ( a > b );
|
|
}
|
|
};
|
|
struct MeshLess
|
|
{
|
|
bool operator()( RENDER_MESHEX &a, RENDER_MESHEX &b )
|
|
{
|
|
return ( a < b ); // sonador 1.6.2 프랍 렌더링시 정렬 문제 해결
|
|
}
|
|
};
|
|
struct TransMeshLess
|
|
{
|
|
bool operator()( RENDER_MESHEX& a, RENDER_MESHEX& b )
|
|
{
|
|
if( a.bForcePriority || b.bForcePriority || ( fabsf( a - b ) < 50.0f && a.dwPriority != b.dwPriority ) )
|
|
return ( a.dwPriority < b.dwPriority );
|
|
|
|
return ( a < b ); // sonador 1.6.2 프랍 렌더링시 정렬 문제 해결
|
|
}
|
|
};
|
|
|
|
int m_nOldBlendMode;
|
|
int m_nOldBlend_Flag;
|
|
};
|