Files
2026-06-01 12:46:52 +02:00

100 lines
2.6 KiB
C++

#pragma once
// shadow용 ViewPort
#include "SViewPort.h"
#include <toolkit/XFlag.h>
#include <dump/XException.h>
#include "KRenderObject.h"
#include "KSortVector.h"
class K3DVertexBuffer;
class KMeshPrimitive;
class SShadowViewPort : public SViewPort, public SRenderTargetContainer
{
public:
static float SHADOW_RATIO;
SShadowViewPort( bool bClearColorBuffer = true, bool bClearDepthBuffer = true );
virtual ~SShadowViewPort();
virtual void Initilaize( K3DRenderDevice *dev, const KViewportStruct &viewarea, float nearClip, float farClip );
virtual void SetCamera( const K3DCamera *cam );
virtual void Register( K3DPrimitive *pr, DWORD flag );
virtual void ClearRegisteredList();
virtual void Render( bool bClearRegister = true, bool bSetRenderTarget = true );
virtual K3DRenderTarget * GetRenderTarget(int index, void* pr);
void SetShadowBottomHeight(float height);
float GetShadowBottomHeight() { return m_fShadowBottomHeight; }
K3DVector GetShadowBase()
{
return K3DVector(GetCameraTargetPos().x - SHADOW_RATIO/2,
GetCameraTargetPos().y - SHADOW_RATIO/2,
GetShadowBottomHeight());
}
bool IsShadowValid() { return m_bIsValid; }
//void SetUseSpecular( bool bUseSpecular );
//void SetUseShadowBuffer( bool bUseShadowBuffer) { m_bUseShadowBuffer = bUseShadowBuffer; }
void SetShadowBufferQuality(int nQuality);
void SetShadowMapQuality(int nQuality);
void SetJitterMapQuality(int nQuality);
void ClearAllShadowMap();
void ReCreateAllShadowMap();
#ifndef NDEBUG
void SetDebugMode( bool bDebugMode ) { m_bDebugMode = bDebugMode; }
#endif
//void SetGameViewport( SViewPort* pViewport) { m_pGameViewport = pViewport; }
int GetShadowBufferQuality();
protected:
void DrawObjectAsShadowBuffer( KSortVector< RENDER_MESHEX > & vList );
void DrawObjectAsShadow( KSortVector< RENDER_MESHEX > & vList );
KSortVector< RENDER_MESHEX > m_vRenderList;
float m_fShadowBottomHeight;
bool RenderShadowMap();
bool RenderShadowBuffer();
bool m_bIsValid;
//////////////////////////////////////////////////////////////////////////
//쉐도우 맵 관련
K3DVector m_vCameraTargetPos_Backup;
void UpdateMatrices(void);
//Shadow====================================
K3DRenderTargetSPtr m_spShadowMap;
K3DRenderTargetSPtr m_spShadowJitterMap;
K3DRenderTargetSPtr m_spShadowBuffer;
#ifndef NDEBUG
bool m_bDebugMode;
#endif
//Test 용===================================
K3DVertexBufferSPtr m_spShadowVB;
int m_nShadowStride;
//bool m_bUseShadowBuffer;
int m_nShadowBufferQuality;
int m_nShadowMapQuality;
int m_nJitterMapQuality;
//SViewPort* m_pGameViewport;
};