Game client codebase including: - CharacterActionControl: Character and creature management - GlobalScript: Network, items, skills, quests, utilities - RYLClient: Main client application with GUI and event handlers - Engine: 3D rendering engine (RYLGL) - MemoryManager: Custom memory allocation - Library: Third-party dependencies (DirectX, boost, etc.) - Tools: Development utilities 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1283 lines
40 KiB
C++
1283 lines
40 KiB
C++
// LightEffectManager.cpp: implementation of the CLightEffectManager class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#include "BaseDataDefine.h"
|
|
#include "LightEffectManager.h"
|
|
#include "BaseGraphicsLayer.h"
|
|
#include "SceneManager.h"
|
|
#include "RenderOption.h"
|
|
|
|
char strMakeZBufferPixelShader[]=
|
|
"ps.1.1\n"
|
|
"tex t0\n"
|
|
//"mov r0,c0\n";
|
|
"dp3 r0,t0,c0\n";
|
|
|
|
char strDepthAlphaPixelShader[]=
|
|
"ps.1.1\n"
|
|
"def c0,1.0f,1.0f,1.0f,1.0f\n"
|
|
"tex t0\n"
|
|
"mov r0,t0\n"
|
|
"mov r0.a,c0\n";
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
CRenderTextureMipmap CLightEffectManager::m_GlareTexture;
|
|
CShadowMap CLightEffectManager::m_FullSceneTexture;
|
|
CRenderTextureMipmap CLightEffectManager::m_SpecularGlareTexture;
|
|
CRenderTexture CLightEffectManager::m_GlareCompositeTexture;
|
|
|
|
CGlareTexture CLightEffectManager::m_SmoothTexture;
|
|
|
|
LPDIRECT3DSURFACE8 CLightEffectManager::m_pTempRenderSurface;
|
|
LPDIRECT3DSURFACE8 CLightEffectManager::m_pTempRenderZBuffer;
|
|
int CLightEffectManager::m_nScreenSize;
|
|
|
|
List<CLightEffectManager::CGlareNode> CLightEffectManager::m_GlareList;
|
|
CTexture CLightEffectManager::m_CharcterEnvTexture;
|
|
LPDIRECT3DCUBETEXTURE8 CLightEffectManager::m_LightCubeTexture;
|
|
|
|
CRenderEnvTexture CLightEffectManager::m_DiffuseLightCubeTexture;
|
|
CRenderEnvTexture CLightEffectManager::m_SpecularLightTexture;
|
|
|
|
CRenderTexture CLightEffectManager::m_SpGlareTexture;
|
|
CRenderTexture CLightEffectManager::m_DOFZBuffer;
|
|
|
|
bool CLightEffectManager::m_FullSceneAnti=true;
|
|
|
|
DWORD CLightEffectManager::m_dwMakeZBufferPixelShader=0xffffffff;
|
|
|
|
CGlareTexture CLightEffectManager::m_DOFSmoothTexture;
|
|
|
|
DWORD CLightEffectManager::m_DepthAlphaShader=0xffffffff;
|
|
CRenderTexture CLightEffectManager::m_NearDOFTexture;
|
|
|
|
int CLightEffectManager::m_RenderSizeX=1024;
|
|
int CLightEffectManager::m_RenderSizeY=1024;
|
|
|
|
CLightEffectManager::CLightEffectManager()
|
|
{
|
|
|
|
}
|
|
|
|
CLightEffectManager::~CLightEffectManager()
|
|
{
|
|
|
|
}
|
|
|
|
void CLightEffectManager::Create(int nSize)
|
|
{
|
|
if(CRenderOption::m_FullSceneGlare)
|
|
{
|
|
m_nScreenSize=nSize;
|
|
m_SmoothTexture.Create(128);
|
|
//m_GlareTexture.Create(128,128);
|
|
//m_SpecularGlareTexture.Create(128,128);
|
|
m_GlareTexture.Create(m_nScreenSize,m_nScreenSize);
|
|
m_SpecularGlareTexture.Create(m_nScreenSize,m_nScreenSize);
|
|
m_FullSceneTexture.Create(m_nScreenSize,m_nScreenSize);
|
|
|
|
|
|
|
|
//m_DOFZBuffer.Create(m_nScreenSize,m_nScreenSize);
|
|
//m_DOFSmoothTexture.Create(m_nScreenSize>>1);
|
|
/*
|
|
m_NearDOFTexture.Create(m_nScreenSize,m_nScreenSize);
|
|
m_GlareCompositeTexture.Create(256,256);
|
|
|
|
//m_FullSceneAnti=true;
|
|
|
|
CTexture::SetPath(NATURETEXTUREPATH);
|
|
m_CharcterEnvTexture.Load("Env.dds");
|
|
|
|
char strCubeTextureName[256];
|
|
sprintf(strCubeTextureName,"%s\\%s",NATURETEXTUREPATH,"LightCubemap.dds");
|
|
|
|
D3DXCreateCubeTextureFromFileExA(BaseGraphicsLayer::GetDevice(),
|
|
strCubeTextureName,
|
|
D3DX_DEFAULT,
|
|
0,
|
|
0,
|
|
D3DFMT_UNKNOWN,
|
|
D3DPOOL_MANAGED,
|
|
D3DX_FILTER_LINEAR,
|
|
D3DX_FILTER_LINEAR,
|
|
0,
|
|
NULL,
|
|
NULL,
|
|
&m_LightCubeTexture);
|
|
|
|
//sprintf(strCubeTextureName,"%s\\%s",NATURETEXTUREPATH,"LightCubemap.dds");
|
|
|
|
m_DiffuseLightCubeTexture.Create(BaseGraphicsLayer::GetDevice(),"sky",NATURETEXTUREPATH);
|
|
m_SpecularLightTexture.Create(BaseGraphicsLayer::GetDevice(),"sp_light",NATURETEXTUREPATH,false);
|
|
|
|
m_SpGlareTexture.Create(256,256);
|
|
|
|
|
|
LPD3DXBUFFER pCode;
|
|
D3DXAssembleShader(strMakeZBufferPixelShader,strlen(strMakeZBufferPixelShader),0,NULL,&pCode,NULL);
|
|
BaseGraphicsLayer::GetDevice()->CreatePixelShader((DWORD*)pCode->GetBufferPointer(),&m_dwMakeZBufferPixelShader);
|
|
pCode->Release();
|
|
|
|
D3DXAssembleShader(strDepthAlphaPixelShader,strlen(strDepthAlphaPixelShader),0,NULL,&pCode,NULL);
|
|
BaseGraphicsLayer::GetDevice()->CreatePixelShader((DWORD*)pCode->GetBufferPointer(),&m_DepthAlphaShader);
|
|
pCode->Release();
|
|
*/
|
|
}
|
|
}
|
|
|
|
void CLightEffectManager::PrepareLightingEnvmap(LPDIRECT3DDEVICE8 pd3dDevice)
|
|
{
|
|
if(CRenderOption::m_FullSceneGlare)
|
|
{
|
|
/*
|
|
pd3dDevice->EndScene();
|
|
m_DiffuseLightCubeTexture.RenderCubeMap(pd3dDevice);
|
|
pd3dDevice->BeginScene();
|
|
|
|
pd3dDevice->EndScene();
|
|
m_SpGlareTexture.Begin(pd3dDevice);
|
|
pd3dDevice->BeginScene();
|
|
pd3dDevice->Clear(0, NULL, D3DCLEAR_ZBUFFER|D3DCLEAR_TARGET,0x0,1.0f, 0);
|
|
|
|
D3DXMATRIX matProj;
|
|
|
|
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/2.0f , 1.0f, 100.0f, 2000.0f );
|
|
|
|
D3DXMATRIX matOldView,matOldProjection;
|
|
pd3dDevice->GetTransform(D3DTS_VIEW,&matOldView);
|
|
pd3dDevice->GetTransform(D3DTS_PROJECTION,&matOldProjection);
|
|
|
|
D3DXMATRIX matViewDir( matOldView);
|
|
matViewDir._41 = 0.0f; matViewDir._42 = 0.0f; matViewDir._43 = 0.0f;
|
|
|
|
|
|
D3DXMATRIX matView;
|
|
matView =matViewDir;
|
|
//matView = DD3DUtil_GetCubeMapViewMatrix( (D3DCUBEMAP_FACES) 1 );
|
|
//D3DXMatrixMultiply( &matView, &matViewDir, &matView );
|
|
//D3DXMatrixMultiply( &matView, &matView ,&matViewDir );
|
|
|
|
|
|
|
|
pd3dDevice->SetTransform(D3DTS_VIEW,&matView);
|
|
pd3dDevice->SetTransform(D3DTS_PROJECTION,&matProj);
|
|
|
|
m_SpecularLightTexture.RenderSkymap(pd3dDevice);
|
|
//m_DiffuseLightCubeTexture.RenderSkymap(m_pd3dDevice);
|
|
|
|
vector3 vecSunPos;
|
|
vector3 vecProjPos;
|
|
float w;
|
|
vecSunPos=vector3(-1000.0f,-500.0f,-1000.0f);
|
|
bool isInScreenSun=BaseGraphicsLayer::TransformVector(vecSunPos,vecProjPos,w);
|
|
|
|
TLVertex m_SunVertex[4];
|
|
|
|
float sx=100.0f;
|
|
float sy=100.0f;
|
|
m_SunVertex[0].v=vecProjPos;
|
|
m_SunVertex[1].v=vecProjPos;
|
|
m_SunVertex[2].v=vecProjPos;
|
|
m_SunVertex[3].v=vecProjPos;
|
|
|
|
m_SunVertex[0].v.x-=sx;m_SunVertex[0].v.y+=sy;
|
|
m_SunVertex[1].v.x-=sx;m_SunVertex[1].v.y-=sy;
|
|
m_SunVertex[2].v.x+=sx;m_SunVertex[2].v.y+=sy;
|
|
m_SunVertex[3].v.x+=sx;m_SunVertex[3].v.y-=sy;
|
|
|
|
m_SunVertex[0].w=w;
|
|
m_SunVertex[1].w=w;
|
|
m_SunVertex[2].w=w;
|
|
m_SunVertex[3].w=w;
|
|
|
|
m_SunVertex[0].Diffuse.c=0xffffffff;
|
|
m_SunVertex[1].Diffuse.c=0xffffffff;
|
|
m_SunVertex[2].Diffuse.c=0xffffffff;
|
|
m_SunVertex[3].Diffuse.c=0xffffffff;
|
|
|
|
m_SunVertex[0].tu=0.0f;
|
|
m_SunVertex[0].tv=1.0f;
|
|
m_SunVertex[0].Specular.c=0x0;
|
|
|
|
m_SunVertex[1].tu=0.0f;
|
|
m_SunVertex[1].tv=0.0f;
|
|
m_SunVertex[1].Specular.c=0x0;
|
|
|
|
m_SunVertex[2].tu=1.0f;
|
|
m_SunVertex[2].tv=1.0f;
|
|
m_SunVertex[2].Specular.c=0x0;
|
|
|
|
m_SunVertex[3].tu=1.0f;
|
|
m_SunVertex[3].tv=0.0f;
|
|
m_SunVertex[3].Specular.c=0x0;
|
|
|
|
|
|
pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
|
|
pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
|
|
pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,TRUE);
|
|
|
|
//m_pd3dDevice->SetTexture(0,);
|
|
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
|
|
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE);
|
|
pd3dDevice->SetVertexShader(TLVERTEXFVF);
|
|
|
|
pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
|
|
|
|
pd3dDevice->SetRenderState( D3DRS_FOGENABLE,FALSE);
|
|
|
|
pd3dDevice->SetTexture(0,CSceneManager::m_WeatherManager.m_SunScene.m_SunTexture.GetTexture());
|
|
|
|
pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,m_SunVertex,sizeof(TLVertex));
|
|
|
|
pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
|
|
|
|
|
pd3dDevice->SetTransform(D3DTS_VIEW,&matOldView);
|
|
pd3dDevice->SetTransform(D3DTS_PROJECTION,&matOldProjection);
|
|
pd3dDevice->EndScene();
|
|
m_SpGlareTexture.End(pd3dDevice);
|
|
pd3dDevice->BeginScene();
|
|
|
|
pd3dDevice->EndScene();
|
|
m_SpecularLightTexture.RenderCubeMap(pd3dDevice);
|
|
pd3dDevice->BeginScene();
|
|
*/
|
|
|
|
RenderFullSceneTextureBegin(pd3dDevice);
|
|
}
|
|
}
|
|
|
|
void CLightEffectManager::RenderFullSceneTextureBegin(LPDIRECT3DDEVICE8 pd3dDevice)
|
|
{
|
|
if(CRenderOption::m_FullSceneGlare)
|
|
{
|
|
pd3dDevice->GetRenderTarget(&m_pTempRenderSurface);
|
|
pd3dDevice->GetDepthStencilSurface(&m_pTempRenderZBuffer);
|
|
|
|
pd3dDevice->SetRenderTarget(m_FullSceneTexture.m_pShadowMapColorSurface,m_FullSceneTexture.m_pShadowMapZSurface);
|
|
|
|
D3DVIEWPORT8 viewData = { 0, 0, m_RenderSizeX, m_RenderSizeY, 0.0f, 1.0f };
|
|
pd3dDevice->SetViewport(&viewData);
|
|
|
|
matrix matProj;
|
|
float fAspect=(float)m_RenderSizeX/(float)m_RenderSizeY;
|
|
fAspect=1.0f/fAspect;
|
|
matProj.MakeProjection(3.1415f/3.0f,fAspect,40.0f,620000.0f);
|
|
//pd3dDevice->SetTransform(D3DTS_PROJECTION,matProj);
|
|
|
|
pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,CSceneManager::m_WeatherManager.m_GF3ClareColor.c,1.0f,0);
|
|
}
|
|
}
|
|
|
|
void CLightEffectManager::RenderGlareScene(LPDIRECT3DDEVICE8 pd3dDevice)
|
|
{
|
|
if(CRenderOption::m_FullSceneGlare)
|
|
{
|
|
pd3dDevice->SetRenderState( D3DRS_FOGENABLE,FALSE);
|
|
D3DVIEWPORT8 viewData = { 0, 0, m_RenderSizeX, m_RenderSizeY, 0.0f, 1.0f };
|
|
pd3dDevice->SetViewport(&viewData);
|
|
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_ADDRESSU, D3DTADDRESS_CLAMP );
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_ADDRESSV, D3DTADDRESS_CLAMP );
|
|
|
|
pd3dDevice->SetTextureStageState( 1, D3DTSS_ADDRESSU, D3DTADDRESS_CLAMP );
|
|
pd3dDevice->SetTextureStageState( 1, D3DTSS_ADDRESSV, D3DTADDRESS_CLAMP );
|
|
|
|
pd3dDevice->SetTextureStageState( 2, D3DTSS_ADDRESSU, D3DTADDRESS_CLAMP );
|
|
pd3dDevice->SetTextureStageState( 2, D3DTSS_ADDRESSV, D3DTADDRESS_CLAMP );
|
|
|
|
pd3dDevice->SetTextureStageState( 3, D3DTSS_ADDRESSU, D3DTADDRESS_CLAMP );
|
|
pd3dDevice->SetTextureStageState( 3, D3DTSS_ADDRESSV, D3DTADDRESS_CLAMP );
|
|
|
|
RenderGlareTexture(pd3dDevice);
|
|
RenderSpecularGlareTexture(pd3dDevice);
|
|
RenderFullSceneGlare(pd3dDevice);
|
|
//RenderDOFZBuffer(pd3dDevice);
|
|
RenderFullSceneTextureEnd(pd3dDevice);
|
|
pd3dDevice->SetRenderState( D3DRS_FOGENABLE,TRUE);
|
|
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP);
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP );
|
|
|
|
pd3dDevice->SetTextureStageState( 1, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP );
|
|
pd3dDevice->SetTextureStageState( 1, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP );
|
|
|
|
pd3dDevice->SetTextureStageState( 2, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP );
|
|
pd3dDevice->SetTextureStageState( 2, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP );
|
|
|
|
pd3dDevice->SetTextureStageState( 3, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP );
|
|
pd3dDevice->SetTextureStageState( 3, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP );
|
|
|
|
/*
|
|
RenderFullSceneAnti(pd3dDevice);
|
|
|
|
RenderDOFZBuffer(pd3dDevice);
|
|
*/
|
|
}
|
|
}
|
|
|
|
void CLightEffectManager::RenderGlareTexture(LPDIRECT3DDEVICE8 pd3dDevice)
|
|
{
|
|
if(CRenderOption::m_FullSceneGlare)
|
|
{
|
|
//pd3dDevice->EndScene();
|
|
|
|
LPDIRECT3DSURFACE8 m_pTempRenderSurface;
|
|
LPDIRECT3DSURFACE8 m_pTempRenderZBuffer;
|
|
pd3dDevice->GetRenderTarget(&m_pTempRenderSurface);
|
|
pd3dDevice->GetDepthStencilSurface(&m_pTempRenderZBuffer);
|
|
|
|
pd3dDevice->SetRenderTarget(m_GlareTexture.GetSurface(),m_pTempRenderZBuffer);
|
|
D3DVIEWPORT8 viewData = { 0, 0, m_RenderSizeX, m_RenderSizeY, 0.0f, 1.0f };
|
|
pd3dDevice->SetViewport(&viewData);
|
|
|
|
pd3dDevice->SetRenderState( D3DRS_LIGHTING,FALSE);
|
|
pd3dDevice->SetRenderState( D3DRS_FOGENABLE,FALSE);
|
|
pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE,FALSE);
|
|
|
|
////////////////////////////////////////////
|
|
//pd3dDevice->BeginScene();
|
|
pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,0xff000000,1.0f,0);
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1,D3DTA_TEXTURE);
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2,D3DTA_DIFFUSE);
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,D3DTOP_SELECTARG2);
|
|
|
|
TLVertex pVertex[8];
|
|
float fTextureSize=128.0f;
|
|
|
|
pVertex[0].v.x=0.0f;
|
|
pVertex[1].v.x=0.0f;
|
|
pVertex[2].v.x=fTextureSize;
|
|
pVertex[3].v.x=fTextureSize;
|
|
|
|
pVertex[1].v.y=0.0f;
|
|
pVertex[3].v.y=0.0f;
|
|
pVertex[0].v.y=fTextureSize;
|
|
pVertex[2].v.y=fTextureSize;
|
|
|
|
pVertex[0].tu=0.0f;
|
|
pVertex[1].tu=0.0f;
|
|
|
|
pVertex[3].tu=1.0f;
|
|
pVertex[2].tu=1.0f;
|
|
|
|
pVertex[1].tv=0.0f;
|
|
pVertex[3].tv=0.0f;
|
|
|
|
pVertex[0].tv=1.0f;
|
|
pVertex[2].tv=1.0f;
|
|
|
|
for(int i=0;i<4;i++)
|
|
{
|
|
pVertex[i].w=0.1f;
|
|
pVertex[i].v.z=0.1f;
|
|
pVertex[i].Diffuse.c=0xff0000ff;
|
|
pVertex[i].Specular.c=0xffffffff;
|
|
}
|
|
|
|
pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
|
|
|
|
pd3dDevice->SetTexture(1,NULL);
|
|
pd3dDevice->SetVertexShader(TLVERTEXFVF);
|
|
//m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
|
|
|
|
//m_CharacterManager.Render(m_pd3dDevice);
|
|
|
|
CSceneManager::m_WeatherManager.m_SkyScene.RenderForGlare(pd3dDevice);
|
|
|
|
|
|
|
|
//m_pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
|
/*
|
|
|
|
for(int cGlareNode=0;cGlareNode<m_GlareList.num;cGlareNode++)
|
|
{
|
|
if(m_GlareList[cGlareNode].m_bCubeEnv)
|
|
{
|
|
m_pd3dDevice->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX,D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR|1);
|
|
m_pd3dDevice->SetTextureStageState( 1,D3DTSS_TEXTURETRANSFORMFLAGS,D3DTTFF_COUNT3);
|
|
|
|
m_pd3dDevice->SetRenderState(D3DRS_NORMALIZENORMALS,TRUE);
|
|
m_pd3dDevice->SetRenderState(D3DRS_LOCALVIEWER,TRUE);
|
|
|
|
m_pd3dDevice->SetTexture(1,m_DiffuseLightCubeTexture.GetTexture());
|
|
|
|
//m_pd3dDevice->SetTexture(1,m_LightCubeTexture);
|
|
|
|
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
|
|
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,D3DTOP_SELECTARG1);
|
|
|
|
m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
|
|
m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP,D3DTOP_SELECTARG1);
|
|
m_pd3dDevice->SetTextureStageState(1, D3DTSS_ADDRESSU, D3DTADDRESS_CLAMP);
|
|
m_pd3dDevice->SetTextureStageState(1, D3DTSS_ADDRESSV, D3DTADDRESS_CLAMP);
|
|
m_pd3dDevice->SetTextureStageState(1, D3DTSS_ADDRESSW, D3DTADDRESS_CLAMP);
|
|
|
|
m_pd3dDevice->SetTransform(D3DTS_WORLD,m_GlareList[cGlareNode].m_matPosition);
|
|
|
|
m_GlareList[cGlareNode].m_pMeshObject->Render(m_pd3dDevice);
|
|
|
|
m_pd3dDevice->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX,1);
|
|
m_pd3dDevice->SetTextureStageState(1 ,D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_DISABLE);
|
|
|
|
m_pd3dDevice->SetTextureStageState(1, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP);
|
|
m_pd3dDevice->SetTextureStageState(1, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP);
|
|
m_pd3dDevice->SetTextureStageState(1, D3DTSS_ADDRESSW, D3DTADDRESS_WRAP);
|
|
|
|
m_pd3dDevice->SetRenderState(D3DRS_NORMALIZENORMALS,FALSE);
|
|
m_pd3dDevice->SetRenderState(D3DRS_LOCALVIEWER,FALSE);
|
|
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
}
|
|
*/
|
|
|
|
|
|
m_GlareList.num=0;
|
|
|
|
pd3dDevice->SetRenderState( D3DRS_LIGHTING,FALSE);
|
|
|
|
pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE,FALSE);
|
|
pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
|
|
|
|
|
|
for(int ix=0;ix<CSceneManager::m_HeightField.GetLSizeX();ix++)
|
|
{
|
|
for(int iy=0;iy<CSceneManager::m_HeightField.GetLSizeY();iy++)
|
|
{
|
|
if( CSceneManager::m_HeightField.m_SectorScene[ix+iy*CSceneManager::m_HeightField.GetLSizeX()].m_MapWater)
|
|
{
|
|
CSceneManager::m_HeightField.m_SectorScene[ix+iy*CSceneManager::m_HeightField.GetLSizeX()].RenderWater(pd3dDevice,true);
|
|
}
|
|
}
|
|
}
|
|
|
|
pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
|
|
|
pd3dDevice->SetRenderState( D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
|
|
pd3dDevice->SetRenderState( D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
|
|
|
|
//m_CharacterManager.RenderGlare(m_pd3dDevice);
|
|
/*
|
|
pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE,TRUE);
|
|
pd3dDevice->SetRenderState( D3DRS_ALPHAREF,0xee);
|
|
*/
|
|
//m_pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
|
|
|
|
|
//m_WeatherManager.Render(m_pd3dDevice);
|
|
|
|
//pd3dDevice->EndScene();
|
|
/////////////////////////////////////////////////
|
|
pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE,TRUE);
|
|
pd3dDevice->SetRenderTarget(m_pTempRenderSurface,m_pTempRenderZBuffer);
|
|
pd3dDevice->SetViewport(&viewData);
|
|
|
|
pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
|
|
|
|
m_pTempRenderSurface->Release();
|
|
m_pTempRenderZBuffer->Release();
|
|
|
|
|
|
//pd3dDevice->BeginScene();
|
|
}
|
|
}
|
|
|
|
void CLightEffectManager::RenderSpecularGlareTexture(LPDIRECT3DDEVICE8 pd3dDevice)
|
|
{
|
|
if(CRenderOption::m_FullSceneSpecularGlare)
|
|
{
|
|
//pd3dDevice->EndScene();
|
|
|
|
LPDIRECT3DSURFACE8 m_pTempRenderSurface;
|
|
LPDIRECT3DSURFACE8 m_pTempRenderZBuffer;
|
|
pd3dDevice->GetRenderTarget(&m_pTempRenderSurface);
|
|
pd3dDevice->GetDepthStencilSurface(&m_pTempRenderZBuffer);
|
|
|
|
pd3dDevice->SetRenderTarget(m_SpecularGlareTexture.GetSurface(),m_pTempRenderZBuffer);
|
|
|
|
D3DVIEWPORT8 viewData = { 0, 0, m_RenderSizeX, m_RenderSizeY, 0.0f, 1.0f };
|
|
pd3dDevice->SetViewport(&viewData);
|
|
|
|
pd3dDevice->SetRenderState( D3DRS_LIGHTING,FALSE);
|
|
pd3dDevice->SetRenderState( D3DRS_FOGENABLE,FALSE);
|
|
|
|
pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE,FALSE);
|
|
|
|
////////////////////////////////////////////
|
|
//pd3dDevice->BeginScene();
|
|
pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,0xff000000,1.0f,0);
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1,D3DTA_TEXTURE);
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2,D3DTA_DIFFUSE);
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,D3DTOP_SELECTARG2);
|
|
|
|
TLVertex pVertex[8];
|
|
float fTextureSize=128.0f;
|
|
|
|
pVertex[0].v.x=0.0f;
|
|
pVertex[1].v.x=0.0f;
|
|
pVertex[2].v.x=fTextureSize;
|
|
pVertex[3].v.x=fTextureSize;
|
|
|
|
pVertex[1].v.y=0.0f;
|
|
pVertex[3].v.y=0.0f;
|
|
pVertex[0].v.y=fTextureSize;
|
|
pVertex[2].v.y=fTextureSize;
|
|
|
|
pVertex[0].tu=0.0f;
|
|
pVertex[1].tu=0.0f;
|
|
|
|
pVertex[3].tu=1.0f;
|
|
pVertex[2].tu=1.0f;
|
|
|
|
pVertex[1].tv=0.0f;
|
|
pVertex[3].tv=0.0f;
|
|
|
|
pVertex[0].tv=1.0f;
|
|
pVertex[2].tv=1.0f;
|
|
|
|
for(int i=0;i<4;i++)
|
|
{
|
|
pVertex[i].w=0.1f;
|
|
pVertex[i].v.z=0.1f;
|
|
pVertex[i].Diffuse.c=0xff0000ff;
|
|
pVertex[i].Specular.c=0xffffffff;
|
|
}
|
|
|
|
pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
|
|
|
pd3dDevice->SetTexture(1,NULL);
|
|
pd3dDevice->SetVertexShader(TLVERTEXFVF);
|
|
//m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
|
|
|
|
//m_CharacterManager.Render(m_pd3dDevice);
|
|
|
|
|
|
//m_pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
|
|
|
pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
|
|
|
pd3dDevice->SetRenderState( D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
|
|
pd3dDevice->SetRenderState( D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
|
|
|
|
//pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
|
|
|
|
if(CRenderOption::m_CharacterPerPixelSpecularLighting)
|
|
CSceneManager::m_CharacterManager.RenderGlare(pd3dDevice);
|
|
|
|
if(CRenderOption::m_AllObjectBump)
|
|
CSceneManager::m_HeightField.RenderGlare(pd3dDevice);
|
|
|
|
/*
|
|
pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE,TRUE);
|
|
pd3dDevice->SetRenderState( D3DRS_ALPHAREF,0xee);
|
|
*/
|
|
//m_pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
|
|
|
|
|
//m_WeatherManager.Render(m_pd3dDevice);
|
|
|
|
//pd3dDevice->EndScene();
|
|
|
|
pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
|
|
|
|
for(int ix=0;ix<CSceneManager::m_HeightField.GetLSizeX();ix++)
|
|
{
|
|
for(int iy=0;iy<CSceneManager::m_HeightField.GetLSizeY();iy++)
|
|
{
|
|
if( CSceneManager::m_HeightField.m_SectorScene[ix+iy*CSceneManager::m_HeightField.GetLSizeX()].m_MapWater)
|
|
{
|
|
//CSceneManager::m_HeightField.m_SectorScene[ix+iy*CSceneManager::m_HeightField.GetLSizeX()].RenderWater(pd3dDevice,true);
|
|
}
|
|
}
|
|
}
|
|
pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
|
|
|
/////////////////////////////////////////////////
|
|
pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE,TRUE);
|
|
pd3dDevice->SetRenderTarget(m_pTempRenderSurface,m_pTempRenderZBuffer);
|
|
|
|
m_pTempRenderSurface->Release();
|
|
m_pTempRenderZBuffer->Release();
|
|
|
|
|
|
//pd3dDevice->BeginScene();
|
|
}
|
|
}
|
|
|
|
void CLightEffectManager::RenderFullSceneGlare(LPDIRECT3DDEVICE8 pd3dDevice)
|
|
{
|
|
if(CRenderOption::m_FullSceneGlare)
|
|
{
|
|
pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,FALSE);
|
|
m_SmoothTexture.GenerateGlareTexture2(pd3dDevice,m_GlareTexture.GetTexture(),vector3(0.25f,0.3f,0.3f),6);
|
|
|
|
float fTextureSize=256.0f;
|
|
|
|
TLVertex pVertex[4];
|
|
pVertex[0].v.x=0.0f;
|
|
pVertex[1].v.x=0.0f;
|
|
pVertex[2].v.x=(float)fTextureSize;
|
|
pVertex[3].v.x=(float)fTextureSize;
|
|
|
|
pVertex[1].v.y=0.0f;
|
|
pVertex[3].v.y=0.0f;
|
|
pVertex[0].v.y=(float)fTextureSize;
|
|
pVertex[2].v.y=(float)fTextureSize;
|
|
|
|
static float fasdf=0.0f;
|
|
|
|
pVertex[0].tu=0.0f;
|
|
pVertex[1].tu=0.0f;
|
|
|
|
pVertex[3].tu=1.0f;
|
|
pVertex[2].tu=1.0f;
|
|
|
|
pVertex[1].tv=0.0f;
|
|
pVertex[3].tv=0.0f;
|
|
|
|
pVertex[0].tv=1.0f;
|
|
pVertex[2].tv=1.0f;
|
|
|
|
for(int i=0;i<4;i++)
|
|
{
|
|
pVertex[i].w=0.1f;
|
|
pVertex[i].v.z=0.1f;
|
|
pVertex[i].Diffuse.c=0xffffffff;
|
|
pVertex[i].Specular.c=0x0;
|
|
}
|
|
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
|
|
//pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
|
|
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE);
|
|
|
|
pd3dDevice->SetTexture(1,NULL);
|
|
pd3dDevice->SetVertexShader(TLVERTEXFVF);
|
|
|
|
pd3dDevice->SetRenderState( D3DRS_SRCBLEND,D3DBLEND_ONE);
|
|
pd3dDevice->SetRenderState( D3DRS_DESTBLEND,D3DBLEND_ONE);
|
|
pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE);
|
|
pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
|
|
|
|
pd3dDevice->SetRenderState( D3DRS_LIGHTING,FALSE);
|
|
|
|
pVertex[2].v.x=(float)m_RenderSizeX;
|
|
pVertex[3].v.x=(float)m_RenderSizeX;
|
|
|
|
pVertex[0].v.y=(float)m_RenderSizeY;
|
|
pVertex[2].v.y=(float)m_RenderSizeY;
|
|
|
|
|
|
pVertex[0].Diffuse.c=pVertex[1].Diffuse.c=pVertex[2].Diffuse.c=pVertex[3].Diffuse.c
|
|
=0xffffffff;
|
|
|
|
pd3dDevice->SetTexture(0,m_SmoothTexture.GetTexture());
|
|
|
|
// pd3dDevice->SetTexture(0,m_GlareTexture.GetTexture());
|
|
|
|
|
|
|
|
pd3dDevice->SetTexture(1,NULL);
|
|
//D3DVIEWPORT8 viewData = { 0, 0, 800, 600, 0.0f, 1.0f };
|
|
//pd3dDevice->SetViewport(&viewData);
|
|
|
|
pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE,FALSE);
|
|
pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
|
|
|
|
pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
|
|
|
|
if(CRenderOption::m_FullSceneSpecularGlare)
|
|
{
|
|
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
|
|
pd3dDevice->SetRenderState( D3DRS_SRCBLEND,D3DBLEND_ONE);
|
|
pd3dDevice->SetRenderState( D3DRS_DESTBLEND,D3DBLEND_ONE);
|
|
pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE);
|
|
|
|
pVertex[0].Diffuse.c=pVertex[1].Diffuse.c=pVertex[2].Diffuse.c=pVertex[3].Diffuse.c
|
|
=0xffffffff;
|
|
|
|
D3DVIEWPORT8 viewData = { 0, 0, m_RenderSizeX, m_RenderSizeY, 0.0f, 1.0f };
|
|
pd3dDevice->SetViewport(&viewData);
|
|
|
|
pd3dDevice->SetTexture(0,m_SpecularGlareTexture.GetTexture());
|
|
//m_pd3dDevice->SetTexture(0,m_GlareTexture.GetTexture(2));
|
|
|
|
pVertex[0].tu=0.0f;
|
|
pVertex[1].tu=0.0f;
|
|
|
|
pVertex[3].tu=m_RenderSizeX/1024.0f;
|
|
pVertex[2].tu=m_RenderSizeX/1024.0f;
|
|
|
|
pVertex[1].tv=0.0f;
|
|
pVertex[3].tv=0.0f;
|
|
|
|
pVertex[0].tv=m_RenderSizeY/1024.0f;
|
|
pVertex[2].tv=m_RenderSizeY/1024.0f;
|
|
|
|
pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
|
|
|
|
m_SmoothTexture.GenerateGlareTexture2(pd3dDevice,m_SpecularGlareTexture.GetTexture(),vector3(0.35f,0.35f,0.35f),5);
|
|
|
|
pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE);
|
|
|
|
pVertex[0].Diffuse.c=pVertex[1].Diffuse.c=pVertex[2].Diffuse.c=pVertex[3].Diffuse.c
|
|
=0xff333333;
|
|
|
|
pd3dDevice->SetTexture(0,m_SmoothTexture.GetTexture());
|
|
//m_pd3dDevice->SetTexture(0,m_GlareTexture.GetTexture(2));
|
|
|
|
//pd3dDevice->SetTexture(0,m_SpecularGlareTexture.GetTexture());
|
|
|
|
pd3dDevice->SetTexture(1,NULL);
|
|
pd3dDevice->SetVertexShader(TLVERTEXFVF);
|
|
pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
|
|
pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
|
|
pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE,FALSE);
|
|
|
|
pVertex[0].tu=0.0f;
|
|
pVertex[1].tu=0.0f;
|
|
|
|
pVertex[3].tu=1.0f;
|
|
pVertex[2].tu=1.0f;
|
|
|
|
pVertex[1].tv=0.0f;
|
|
pVertex[3].tv=0.0f;
|
|
|
|
pVertex[0].tv=1.0f;
|
|
pVertex[2].tv=1.0f;
|
|
|
|
pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
|
|
|
|
|
|
}
|
|
pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE,TRUE);
|
|
|
|
/*
|
|
for(int ix=0;ix<30;ix++)
|
|
{
|
|
for(int iy=0;iy<1;iy++)
|
|
{
|
|
pVertex[0].v.x=0.0f+ix-15.0f;
|
|
pVertex[1].v.x=0.0f+ix-15.0f;
|
|
pVertex[2].v.x=(float)fTextureSize+ix-15.0f;
|
|
pVertex[3].v.x=(float)fTextureSize+ix-15.0f;
|
|
|
|
pVertex[1].v.y=0.0f+iy;
|
|
pVertex[3].v.y=0.0f+iy;
|
|
pVertex[0].v.y=(float)fTextureSize+iy;
|
|
pVertex[2].v.y=(float)fTextureSize+iy;
|
|
|
|
m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
|
|
}
|
|
}
|
|
*/
|
|
|
|
////////////////////////
|
|
|
|
//m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
|
|
|
|
|
|
pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
|
pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,FALSE);
|
|
pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
|
|
}
|
|
}
|
|
|
|
void CLightEffectManager::RenderFullSceneAnti(LPDIRECT3DDEVICE8 pd3dDevice)
|
|
{
|
|
if(CRenderOption::m_FullSceneGlare)
|
|
{
|
|
if(!m_FullSceneAnti)
|
|
return;
|
|
pd3dDevice->SetRenderTarget(m_pTempRenderSurface,m_pTempRenderZBuffer);
|
|
|
|
m_pTempRenderSurface->Release();
|
|
m_pTempRenderZBuffer->Release();
|
|
|
|
TLVertex pVertex[4];
|
|
|
|
pVertex[0].v.x=0.0f;
|
|
pVertex[1].v.x=0.0f;
|
|
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx;
|
|
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx;
|
|
|
|
pVertex[1].v.y=0.0f;
|
|
pVertex[3].v.y=0.0f;
|
|
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy;
|
|
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy;
|
|
|
|
pVertex[0].tu=0.0f;
|
|
pVertex[1].tu=0.0f;
|
|
|
|
pVertex[3].tu=1.0f;
|
|
pVertex[2].tu=1.0f;
|
|
|
|
pVertex[1].tv=0.0f;
|
|
pVertex[3].tv=0.0f;
|
|
|
|
pVertex[0].tv=1.0f;
|
|
pVertex[2].tv=1.0f;
|
|
|
|
for(int i=0;i<4;i++)
|
|
{
|
|
pVertex[i].w=0.1f;
|
|
pVertex[i].v.z=0.1f;
|
|
pVertex[i].Diffuse.c=0xffffffff;
|
|
pVertex[i].Specular.c=0xffffffff;
|
|
}
|
|
|
|
pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
|
|
pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
|
|
pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE,FALSE);
|
|
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
|
|
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE);
|
|
|
|
pd3dDevice->SetTexture(1,NULL);
|
|
pd3dDevice->SetVertexShader(TLVERTEXFVF);
|
|
|
|
pd3dDevice->SetRenderState( D3DRS_SRCBLEND,D3DBLEND_ONE);
|
|
pd3dDevice->SetRenderState( D3DRS_DESTBLEND,D3DBLEND_ONE);
|
|
pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE);
|
|
|
|
color VertexColor;
|
|
|
|
for(int cTexture=0;cTexture<9;cTexture++)
|
|
{
|
|
VertexColor.r=(unsigned char)(32.0f/(float)8.0f);
|
|
VertexColor.a=VertexColor.b=VertexColor.g=VertexColor.r;
|
|
VertexColor.a=255;
|
|
////////
|
|
pVertex[0].Diffuse.c=pVertex[1].Diffuse.c=pVertex[2].Diffuse.c=pVertex[3].Diffuse.c
|
|
=VertexColor.c;
|
|
////////
|
|
pd3dDevice->SetTexture(0,m_FullSceneTexture.m_pShadowMapColorTexture);
|
|
|
|
switch(cTexture)
|
|
{
|
|
case 0:
|
|
pVertex[0].Diffuse.c=pVertex[1].Diffuse.c=pVertex[2].Diffuse.c=pVertex[3].Diffuse.c
|
|
=0xffeeeeee;
|
|
pVertex[0].v.x=0.0f;
|
|
pVertex[1].v.x=0.0f;
|
|
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx;
|
|
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx;
|
|
pVertex[1].v.y=0.0f;
|
|
pVertex[3].v.y=0.0f;
|
|
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy;
|
|
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy;
|
|
break;
|
|
case 1:
|
|
pVertex[0].v.x=-1;
|
|
pVertex[1].v.x=-1;
|
|
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx-1;
|
|
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx-1;
|
|
pVertex[1].v.y=-1;
|
|
pVertex[3].v.y=-1;
|
|
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy-1;
|
|
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy-1;
|
|
break;
|
|
case 2:
|
|
pVertex[0].v.x=0;
|
|
pVertex[1].v.x=0;
|
|
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx;
|
|
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx;
|
|
pVertex[1].v.y=-1;
|
|
pVertex[3].v.y=-1;
|
|
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy-1;
|
|
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy-1;
|
|
break;
|
|
case 3:
|
|
pVertex[0].v.x=1;
|
|
pVertex[1].v.x=1;
|
|
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx+1;
|
|
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx+1;
|
|
pVertex[1].v.y=-1;
|
|
pVertex[3].v.y=-1;
|
|
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy-1;
|
|
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy-1;
|
|
break;
|
|
////////////
|
|
case 4:
|
|
pVertex[0].v.x=-1;
|
|
pVertex[1].v.x=-1;
|
|
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx-1;
|
|
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx-1;
|
|
pVertex[1].v.y=0;
|
|
pVertex[3].v.y=0;
|
|
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy;
|
|
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy;
|
|
break;
|
|
case 5:
|
|
pVertex[0].v.x=1;
|
|
pVertex[1].v.x=1;
|
|
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx+1;
|
|
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx+1;
|
|
pVertex[1].v.y=0;
|
|
pVertex[3].v.y=0;
|
|
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy;
|
|
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy;
|
|
break;
|
|
///
|
|
case 6:
|
|
pVertex[0].v.x=-1;
|
|
pVertex[1].v.x=-1;
|
|
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx-1;
|
|
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx-1;
|
|
pVertex[1].v.y=1;
|
|
pVertex[3].v.y=1;
|
|
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy+1;
|
|
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy+1;
|
|
break;
|
|
case 7:
|
|
pVertex[0].v.x=0;
|
|
pVertex[1].v.x=0;
|
|
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx;
|
|
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx;
|
|
pVertex[1].v.y=1;
|
|
pVertex[3].v.y=1;
|
|
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy+1;
|
|
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy+1;
|
|
break;
|
|
case 8:
|
|
pVertex[0].v.x=1;
|
|
pVertex[1].v.x=1;
|
|
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx+1;
|
|
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx+1;
|
|
pVertex[1].v.y=1;
|
|
pVertex[3].v.y=1;
|
|
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy+1;
|
|
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy+1;
|
|
break;
|
|
|
|
}
|
|
pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
|
|
}
|
|
pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
|
|
}
|
|
}
|
|
|
|
void CLightEffectManager::RenderFullSceneTextureEnd(LPDIRECT3DDEVICE8 pd3dDevice)
|
|
{
|
|
if(CRenderOption::m_FullSceneGlare)
|
|
{
|
|
//if(m_FullSceneAnti)
|
|
// return;
|
|
|
|
pd3dDevice->SetRenderTarget(m_pTempRenderSurface,m_pTempRenderZBuffer);
|
|
m_pTempRenderSurface->Release();
|
|
m_pTempRenderZBuffer->Release();
|
|
|
|
TLVertex pVertex[4];
|
|
|
|
pVertex[0].v.x=0.0f;
|
|
pVertex[1].v.x=0.0f;
|
|
pVertex[2].v.x=(float)BaseGraphicsLayer::m_lScreenSx;
|
|
pVertex[3].v.x=(float)BaseGraphicsLayer::m_lScreenSx;
|
|
|
|
pVertex[1].v.y=0.0f;
|
|
pVertex[3].v.y=0.0f;
|
|
pVertex[0].v.y=(float)BaseGraphicsLayer::m_lScreenSy;
|
|
pVertex[2].v.y=(float)BaseGraphicsLayer::m_lScreenSy;
|
|
|
|
static float fasdf=0.0f;
|
|
|
|
pVertex[0].tu=0.0f;
|
|
pVertex[1].tu=0.0f;
|
|
|
|
pVertex[1].tv=0.0f;
|
|
pVertex[3].tv=0.0f;
|
|
|
|
pVertex[3].tu=1.0f;
|
|
pVertex[2].tu=1.0f;
|
|
|
|
|
|
pVertex[3].tu=m_RenderSizeX/1024.0f;
|
|
pVertex[2].tu=m_RenderSizeX/1024.0f;
|
|
|
|
|
|
pVertex[0].tv=1.0f;
|
|
pVertex[2].tv=1.0f;
|
|
|
|
pVertex[0].tv=m_RenderSizeY/1024.0f;
|
|
pVertex[2].tv=m_RenderSizeY/1024.0f;
|
|
|
|
for(int i=0;i<4;i++)
|
|
{
|
|
pVertex[i].w=0.1f;
|
|
pVertex[i].v.z=0.1f;
|
|
pVertex[i].Diffuse.c=0xffffffff;
|
|
pVertex[i].Specular.c=0xffffffff;
|
|
}
|
|
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
|
|
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE);
|
|
|
|
if(CRenderOption::m_DepthOfField)
|
|
pd3dDevice->SetTexture(0,m_DOFZBuffer.GetTexture());
|
|
else
|
|
pd3dDevice->SetTexture(0,m_FullSceneTexture.m_pShadowMapColorTexture);
|
|
|
|
//D3DVIEWPORT8 viewData = { 0, 0, BaseGraphicsLayer::m_lScreenSx, BaseGraphicsLayer::m_lScreenSy, 0.0f, 1.0f };
|
|
//pd3dDevice->SetViewport(&viewData);
|
|
|
|
pd3dDevice->SetRenderState(D3DRS_ZENABLE,D3DZB_FALSE);
|
|
pd3dDevice->SetTexture(1,NULL);
|
|
pd3dDevice->SetVertexShader(TLVERTEXFVF);
|
|
|
|
pd3dDevice->SetRenderState( D3DRS_LIGHTING,FALSE);
|
|
pd3dDevice->SetRenderState( D3DRS_FOGENABLE,FALSE);
|
|
pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE,FALSE);
|
|
pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,FALSE);
|
|
|
|
pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
|
|
|
|
pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE,TRUE);
|
|
pd3dDevice->SetRenderState(D3DRS_ZENABLE,D3DZB_TRUE);
|
|
}
|
|
}
|
|
|
|
void CLightEffectManager::RenderDOFZBuffer(LPDIRECT3DDEVICE8 pd3dDevice)
|
|
{
|
|
if(CRenderOption::m_DepthOfField)
|
|
{
|
|
//pd3dDevice->EndScene();
|
|
pd3dDevice->SetRenderState( D3DRS_LIGHTING,FALSE);
|
|
pd3dDevice->SetRenderState( D3DRS_FOGENABLE,FALSE);
|
|
pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE,FALSE);
|
|
|
|
LPDIRECT3DSURFACE8 pTempRenderSurface;
|
|
LPDIRECT3DSURFACE8 pTempRenderZBuffer;
|
|
pd3dDevice->GetRenderTarget(&pTempRenderSurface);
|
|
pd3dDevice->GetDepthStencilSurface(&pTempRenderZBuffer);
|
|
|
|
pd3dDevice->SetRenderTarget(m_DOFZBuffer.GetSurface(),pTempRenderZBuffer);
|
|
|
|
D3DVIEWPORT8 viewData = { 0, 0, m_RenderSizeX, m_RenderSizeY, 0.0f, 1.0f };
|
|
pd3dDevice->SetViewport(&viewData);
|
|
|
|
//pd3dDevice->BeginScene();
|
|
pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,0xff000000,1.0f,0);
|
|
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1,D3DTA_TEXTURE);
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2,D3DTA_DIFFUSE);
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,D3DTOP_SELECTARG1);
|
|
|
|
TLVertex pVertex[8];
|
|
|
|
pVertex[0].v.x=0.0f;
|
|
pVertex[1].v.x=0.0f;
|
|
pVertex[2].v.x=m_RenderSizeX;
|
|
pVertex[3].v.x=m_RenderSizeX;
|
|
|
|
pVertex[1].v.y=0.0f;
|
|
pVertex[3].v.y=0.0f;
|
|
pVertex[0].v.y=m_RenderSizeY;
|
|
pVertex[2].v.y=m_RenderSizeY;
|
|
|
|
pVertex[0].tu=0.0f;
|
|
pVertex[1].tu=0.0f;
|
|
|
|
pVertex[3].tu=m_RenderSizeX/1024.0f;
|
|
pVertex[2].tu=m_RenderSizeX/1024.0f;
|
|
|
|
pVertex[1].tv=0.0f;
|
|
pVertex[3].tv=0.0f;
|
|
|
|
pVertex[0].tv=m_RenderSizeY/1024.0f;
|
|
pVertex[2].tv=m_RenderSizeY/1024.0f;
|
|
|
|
static float fD=0.0f;
|
|
fD+=0.003f;
|
|
|
|
if(fD>=1.0f)
|
|
{
|
|
fD=0.0f;
|
|
}
|
|
|
|
for(int i=0;i<4;i++)
|
|
{
|
|
pVertex[i].w=1.0f;
|
|
pVertex[i].v.z=0.0001f;
|
|
pVertex[i].Diffuse.c=0xff0000ff;
|
|
pVertex[i].Specular.c=0xffffffff;
|
|
}
|
|
|
|
pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
|
|
|
|
pd3dDevice->SetTexture(1,NULL);
|
|
pd3dDevice->SetVertexShader(TLVERTEXFVF);
|
|
pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE,FALSE);
|
|
|
|
pd3dDevice->SetTexture(0,m_FullSceneTexture.GetShadowMapColorTexture());
|
|
|
|
pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
|
|
pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
|
|
|
|
|
|
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1,D3DTA_TEXTURE);
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2,D3DTA_DIFFUSE);
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,D3DTOP_SELECTARG1);
|
|
|
|
//m_DOFSmoothTexture.GenerateGlareTexture(pd3dDevice,m_FullSceneTexture.GetShadowMapColorTexture(),vector3(0.25f,0.25f,0.25f),10);
|
|
|
|
float m_fDepth[4];
|
|
m_fDepth[0]=0.994f;
|
|
m_fDepth[1]=0.995f;
|
|
m_fDepth[2]=0.996f;
|
|
m_fDepth[3]=0.998f;
|
|
|
|
vector3 vecBlurRate;
|
|
vecBlurRate=vector3(0.252f,0.253f,0.252f);
|
|
|
|
pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
|
|
|
|
pVertex[3].tu=1.0f;
|
|
pVertex[2].tu=1.0f;
|
|
|
|
pVertex[0].tv=1.0f;
|
|
pVertex[2].tv=1.0f;
|
|
|
|
|
|
for(int nDepth=0;nDepth<3;nDepth++)
|
|
{
|
|
pVertex[0].v.z=pVertex[1].v.z=pVertex[2].v.z=pVertex[3].v.z=m_fDepth[nDepth];
|
|
|
|
if(nDepth==0)
|
|
{
|
|
m_DOFSmoothTexture.ProcedualGenerateGlareTexture(pd3dDevice,m_FullSceneTexture.GetShadowMapColorTexture(),vecBlurRate,1);
|
|
}
|
|
else
|
|
{
|
|
m_DOFSmoothTexture.ProcedualGenerateGlareTexture(pd3dDevice,NULL,vecBlurRate,1);
|
|
}
|
|
|
|
pd3dDevice->SetVertexShader(TLVERTEXFVF);
|
|
pd3dDevice->SetTexture(0,m_DOFSmoothTexture.GetTexture());
|
|
pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
|
|
}
|
|
|
|
float m_fNearDepth[3];
|
|
|
|
m_fNearDepth[0]=0.85f;
|
|
m_fNearDepth[1]=0.80f;
|
|
m_fNearDepth[2]=0.68f;
|
|
/*
|
|
|
|
for(int nNearDepth=0;nNearDepth<3;nNearDepth++)
|
|
{
|
|
pd3dDevice->EndScene();
|
|
|
|
pd3dDevice->SetRenderTarget(m_NearDOFTexture.GetSurface(),pTempRenderZBuffer);
|
|
pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,0x00000000,1.0f,0);
|
|
|
|
pd3dDevice->SetRenderState(D3DRS_LASTPIXEL,FALSE);
|
|
|
|
pd3dDevice->BeginScene();
|
|
pd3dDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_GREATER);
|
|
pVertex[0].v.z=pVertex[1].v.z=pVertex[2].v.z=pVertex[3].v.z=m_fNearDepth[nNearDepth];
|
|
pd3dDevice->SetTexture(0,m_FullSceneTexture.GetShadowMapColorTexture());
|
|
pd3dDevice->SetVertexShader(TLVERTEXFVF);
|
|
pd3dDevice->SetPixelShader(m_DepthAlphaShader);
|
|
pd3dDevice->SetRenderState(D3DRS_COLORWRITEENABLE,D3DCOLORWRITEENABLE_ALPHA|D3DCOLORWRITEENABLE_BLUE|D3DCOLORWRITEENABLE_GREEN|D3DCOLORWRITEENABLE_RED);
|
|
pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
|
|
pd3dDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_LESSEQUAL);
|
|
pd3dDevice->SetPixelShader(NULL);
|
|
pd3dDevice->SetRenderState(D3DRS_COLORWRITEENABLE,D3DCOLORWRITEENABLE_BLUE|D3DCOLORWRITEENABLE_GREEN|D3DCOLORWRITEENABLE_RED);
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1,D3DTA_TEXTURE);
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2,D3DTA_DIFFUSE);
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,D3DTOP_SELECTARG1);
|
|
pd3dDevice->SetRenderState(D3DRS_LASTPIXEL,TRUE);
|
|
pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
|
|
pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
|
|
pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
|
|
pd3dDevice->EndScene();
|
|
|
|
|
|
pd3dDevice->SetRenderTarget(m_DOFZBuffer.GetSurface(),pTempRenderZBuffer);
|
|
pd3dDevice->BeginScene();
|
|
|
|
m_DOFSmoothTexture.ProcedualGenerateGlareTexture(pd3dDevice,m_NearDOFTexture.GetTexture(),vecBlurRate,nNearDepth*10);
|
|
|
|
pd3dDevice->SetRenderState( D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
|
|
pd3dDevice->SetRenderState( D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
|
|
pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE);
|
|
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1,D3DTA_TEXTURE);
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2,D3DTA_DIFFUSE);
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,D3DTOP_SELECTARG1);
|
|
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP,D3DTOP_DISABLE);
|
|
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
|
|
pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );
|
|
pd3dDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
|
|
|
|
pd3dDevice->SetTexture(0,m_DOFSmoothTexture.GetTexture());
|
|
pd3dDevice->SetVertexShader(TLVERTEXFVF);
|
|
pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
|
|
pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
|
|
pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE);
|
|
pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
|
|
}
|
|
*/
|
|
////////////////////////near End
|
|
/*
|
|
m_DOFSmoothTexture.ProcedualGenerateGlareTexture(pd3dDevice,NULL,vecBlurRate,15);
|
|
pd3dDevice->SetRenderState(D3DRS_ZBIAS,16);
|
|
pd3dDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_GREATEREQUAL);
|
|
pVertex[0].v.z=pVertex[1].v.z=pVertex[2].v.z=pVertex[3].v.z=0.8f;
|
|
|
|
pd3dDevice->SetTexture(0,m_DOFSmoothTexture.GetTexture());
|
|
pd3dDevice->SetVertexShader(TLVERTEXFVF);
|
|
pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,pVertex,sizeof(TLVertex));
|
|
pd3dDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_LESSEQUAL);
|
|
pd3dDevice->SetRenderState(D3DRS_ZBIAS,0);
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
//m_DOFSmoothTexture.ProcedualGenerateGlareTexture(pd3dDevice,NULL,vector3(0.25f,0.25f,0.25f),1);
|
|
//m_DOFSmoothTexture.ProcedualGenerateGlareTexture(pd3dDevice,NULL,vector3(0.25f,0.25f,0.25f),1);
|
|
|
|
//ProcedualGenerateGlareTexture(LPDIRECT3DDEVICE8 pd3dDevice, LPDIRECT3DBASETEXTURE8 pTexture, vector3 vecNeighbor, int nDepth)
|
|
|
|
//pd3dDevice->SetTexture(0,m_DOFSmoothTexture.GetTexture());
|
|
|
|
|
|
|
|
pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
|
|
|
pd3dDevice->SetRenderState( D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
|
|
pd3dDevice->SetRenderState( D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
|
|
|
|
//pd3dDevice->EndScene();
|
|
/////////////////////////////////////////////////
|
|
pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE,TRUE);
|
|
|
|
pd3dDevice->SetRenderTarget(pTempRenderSurface,pTempRenderZBuffer);
|
|
//pd3dDevice->BeginScene();
|
|
}
|
|
}
|