#pragma once /// @brief ViewPort의 게임관련 인터페이스( 툴 말구 ) #include "KViewport.h" #include #include #include #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(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(); //& 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; };