Files
Client/GameTools/Zallad3D SceneClass/GlareManager.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

348 lines
9.6 KiB
C++

// GlareManager.cpp: implementation of the CGlareManager class.
//
//////////////////////////////////////////////////////////////////////
#include "d3dx8.h"
#include "dxutil.h"
#include "RenderOption.h"
#include "BaseGraphicsLayer.h"
#include "CharacterLightShadowManager.h"
#include "SceneManager.h"
#include "GlareManager.h"
#include "SceneStateMgr.h"
#include "FullSceneEffect.h"
//=======================
// Sample Value
//=======================
#define HIGH_WEIGHT_16 0.6f
#define HIGH_WEIGHT_32 0.34f
#define HIGH_WEIGHT_64 0.15f
#define HIGH_WEIGHT_128 0.1f
#define MEDIUM_WEIGHT_16 0.3f
#define MEDIUM_WEIGHT_32 0.4f
#define MEDIUM_WEIGHT_64 0.36f
#define MEDIUM_WEIGHT_128 0.2f
#define LOW_WEIGHT_16 0.3f
#define LOW_WEIGHT_32 0.3f
#define LOW_WEIGHT_64 0.2f
#define LOW_WEIGHT_128 0.2f
CGlareManager::CGlareManager()
{
m_pd3dDevice = BaseGraphicsLayer::GetDevice();
HighBlendWeight = D3DXVECTOR4( HIGH_WEIGHT_16, HIGH_WEIGHT_32, HIGH_WEIGHT_64, HIGH_WEIGHT_128);
MediumBlendWeight = D3DXVECTOR4( MEDIUM_WEIGHT_16, MEDIUM_WEIGHT_32, MEDIUM_WEIGHT_64, MEDIUM_WEIGHT_128 );
LowBlendWeight = D3DXVECTOR4( LOW_WEIGHT_16, LOW_WEIGHT_32, LOW_WEIGHT_64, LOW_WEIGHT_128 );
SetDefault();
}
CGlareManager::~CGlareManager()
{
Destroy();
}
void CGlareManager::SetDefault()
{
m_vBlendWeight_fullscene = MediumBlendWeight;
m_vBlendWeight_character = D3DXVECTOR4(1.0F,1.0F,1.0F,1.0F);
m_dwColor_fullscene = 0x88888888;
m_dwColor_character = 0x88888888;
}
void CGlareManager::Create()
{
// if( CRenderOption::m_FullSceneGlare )
// {
m_FullSceneGlare.Create( BaseGraphicsLayer::GetDevice() );
// }
// if( CRenderOption::m_FullSceneSpecularGlare )
// {
m_CharacterGlare.Create( BaseGraphicsLayer::GetDevice() );
// }
}
void CGlareManager::Destroy()
{
// if( CRenderOption::m_FullSceneGlare )
// {
m_FullSceneGlare.Destroy();
// }
// if( CRenderOption::m_FullSceneSpecularGlare )
// {
m_CharacterGlare.Destroy();
// }
}
void CGlareManager::RenderFullSceneGlare()
{
m_FullSceneGlare.BeginRenderToTexture();
m_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(255,255,255), 1.0f, 0L );
CSceneManager::m_pFullSceneEffect->Render(0,GLARETEXTURE_WIDTH,GLARETEXTURE_HEIGHT,true);
/*
CSceneManager::m_WeatherManager.Render(m_pd3dDevice);
CSceneManager::m_HeightField.Render( m_pd3dDevice );
CSceneManager::m_HeightField.RenderWater( m_pd3dDevice );
CSceneManager::m_CharacterManager.Render( m_pd3dDevice );
*/
m_FullSceneGlare.EndRenderToTexture();
m_FullSceneGlare.ShakeGlareImage( m_vBlendWeight_fullscene.x,
m_vBlendWeight_fullscene.y,
m_vBlendWeight_fullscene.z,
m_vBlendWeight_fullscene.w );
CSceneStateMgr::_SetD3DRenderState( D3DRS_TEXTUREFACTOR, m_dwColor_fullscene );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_TFACTOR );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2 );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_TFACTOR );
m_pd3dDevice->SetVertexShader( GLAREDISPLAY_VERTEX::FVF );
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
CSceneStateMgr::_SetD3DRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
CSceneStateMgr::_SetD3DRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );
CSceneStateMgr::_SetD3DRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
CSceneStateMgr::_SetD3DRenderState( D3DRS_ZENABLE, FALSE );
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGENABLE, FALSE );
m_pd3dDevice->SetVertexShader( GLAREDISPLAY_VERTEX::FVF );
RenderQuad( 0.0f, 0.0f, m_FullSceneGlare.m_RenderTarget256[1].pTexture );
// Set things back to normal
CSceneStateMgr::_SetD3DRenderState( D3DRS_CULLMODE, D3DCULL_CCW );
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE, FALSE );
CSceneStateMgr::_SetD3DRenderState( D3DRS_ZENABLE, TRUE );
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGENABLE, TRUE );
}
void CGlareManager::RenderCharacterGlare()
{
m_CharacterGlare.BeginRenderToTexture();
m_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,0), 1.0f, 0L );
//--------------------------------
// Draw Character specularImage
CSceneManager::m_CharacterManager.Render( m_pd3dDevice );
m_CharacterGlare.EndRenderToTexture();
m_CharacterGlare.ShakeGlareImage( m_vBlendWeight_character.x,
m_vBlendWeight_character.y,
m_vBlendWeight_character.z,
m_vBlendWeight_character.w );
CSceneStateMgr::_SetD3DRenderState( D3DRS_TEXTUREFACTOR, m_dwColor_character );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE4X );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_TFACTOR );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2 );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_TFACTOR );
m_pd3dDevice->SetVertexShader( GLAREDISPLAY_VERTEX::FVF );
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
CSceneStateMgr::_SetD3DRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
CSceneStateMgr::_SetD3DRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );
CSceneStateMgr::_SetD3DRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
CSceneStateMgr::_SetD3DRenderState( D3DRS_ZENABLE, FALSE );
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGENABLE, FALSE );
m_pd3dDevice->SetVertexShader( GLAREDISPLAY_VERTEX::FVF );
RenderQuad( 0.0f, 0.0f, m_CharacterGlare.m_RenderTarget256[1].pTexture );
//======================
// TEST SCREEN
//======================
/* CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE, FALSE );
D3DVIEWPORT8 TempViewport;
m_pd3dDevice->GetViewport( &TempViewport );
float center = 0.0f;
GLAREDISPLAY_VERTEX pVertex[4];
pVertex[0].x = center;
pVertex[0].y = center;
pVertex[0].z = 0.5f;
pVertex[0].rhw = 1.0f;
pVertex[0].u = 0.0f;
pVertex[0].v = 0.0f;
pVertex[0].color = 0x55ffffff;
pVertex[1].x = 300.0f + center;
pVertex[1].y = center;
pVertex[1].z = 0.5f;
pVertex[1].rhw = 1.0f;
pVertex[1].u = 1.0f;
pVertex[1].v = 0.0f;
pVertex[1].color = 0x55ffffff;
pVertex[2].x = center;
pVertex[2].y = 300.0f + center;
pVertex[2].z = 0.5f;
pVertex[2].rhw = 1.0f;
pVertex[2].u = 0.0f;
pVertex[2].v = 1.0f;
pVertex[2].color = 0x55ffffff;
pVertex[3].x = 300.0f + center;
pVertex[3].y = 300.0f + center;
pVertex[3].z = 0.5f;
pVertex[3].rhw = 1.0f;
pVertex[3].u = 1.0f;
pVertex[3].v = 1.0f;
pVertex[3].color = 0x55ffffff;
m_pd3dDevice->SetTexture(0, m_CharacterGlare.m_RenderTarget256[0].pTexture );
m_pd3dDevice->DrawPrimitiveUP( D3DPT_TRIANGLESTRIP, 2, pVertex, sizeof(GLAREDISPLAY_VERTEX) );
//================================================================================================
*/
//Set things back to normal
CSceneStateMgr::_SetD3DRenderState( D3DRS_CULLMODE, D3DCULL_CCW );
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE, FALSE );
CSceneStateMgr::_SetD3DRenderState( D3DRS_ZENABLE, TRUE );
CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGENABLE, TRUE );
}
void CGlareManager::RenderQuad( float moveX, float moveY, LPDIRECT3DTEXTURE8 pTexture )
{
D3DVIEWPORT8 TempViewport;
m_pd3dDevice->GetViewport( &TempViewport );
float center = 0.0f;
GLAREDISPLAY_VERTEX pVertex[4];
pVertex[0].x = center + moveX;
pVertex[0].y = center + moveY;
pVertex[0].z = 0.5f;
pVertex[0].rhw = 1.0f;
pVertex[0].u = 0.0f;
pVertex[0].v = 0.0f;
pVertex[0].color = 0x55ffffff;
pVertex[1].x = (float)TempViewport.Width + center + moveX;
pVertex[1].y = center + moveY;
pVertex[1].z = 0.5f;
pVertex[1].rhw = 1.0f;
pVertex[1].u = 1.0f;
pVertex[1].v = 0.0f;
pVertex[1].color = 0x55ffffff;
pVertex[2].x = center + moveX;
pVertex[2].y = (float)TempViewport.Height + center + moveY;
pVertex[2].z = 0.5f;
pVertex[2].rhw = 1.0f;
pVertex[2].u = 0.0f;
pVertex[2].v = 1.0f;
pVertex[2].color = 0x55ffffff;
pVertex[3].x = (float)TempViewport.Width + center + moveX;
pVertex[3].y = (float)TempViewport.Height + center + moveY;
pVertex[3].z = 0.5f;
pVertex[3].rhw = 1.0f;
pVertex[3].u = 1.0f;
pVertex[3].v = 1.0f;
pVertex[3].color = 0x55ffffff;
m_pd3dDevice->SetTexture(0, pTexture );
m_pd3dDevice->DrawPrimitiveUP( D3DPT_TRIANGLESTRIP, 2, pVertex, sizeof(GLAREDISPLAY_VERTEX) );
}
void CGlareManager::SetBlendWeight( GLARE_TYPE type, D3DXVECTOR4 weight )
{
switch( type )
{
case GLARE_FULLSCENE:
{
m_vBlendWeight_fullscene = weight;
}
break;
case GLARE_CHARACTER:
{
m_vBlendWeight_character = weight;
}
break;
}
}
D3DXVECTOR4 CGlareManager::GetBlendWeight( GLARE_TYPE type )
{
switch( type )
{
case GLARE_FULLSCENE:
{
return m_vBlendWeight_fullscene;
}
break;
case GLARE_CHARACTER:
{
return m_vBlendWeight_character;
}
break;
}
return 0;
}
void CGlareManager::SetColor( GLARE_TYPE type, DWORD color )
{
switch( type )
{
case GLARE_FULLSCENE:
{
m_dwColor_fullscene = color;
}
break;
case GLARE_CHARACTER:
{
m_dwColor_character = color;
}
break;
}
}
DWORD CGlareManager::GetColor( GLARE_TYPE type )
{
switch( type )
{
case GLARE_FULLSCENE:
{
return m_dwColor_fullscene;
}
break;
case GLARE_CHARACTER:
{
return m_dwColor_character;
}
break;
}
return 0;
}