|
|
HRESULT EvgDeviceD3D8::Render()
{
HRESULT hr;
LPCSTR pTechnique = NULL;
EvShader shader;
if( SUCCEEDED( m_pd3dDevice->BeginScene() ) )
{
//--------------设置QUAD--------------------------------------------------------------
m_quadPt[0].c = 0xff00ff00;
m_quadPt[0].t = EvVertex2(0.0f, 0.0f);
m_quadPt[1].c = 0xff00ff00;
m_quadPt[1].t = EvVertex2(0.0f, 1.0f);
m_quadPt[2].c = 0xff00ff00;
m_quadPt[2].t = EvVertex2( 1.0f, 0.0f);
m_quadPt[3].c = 0xff00ff00;
m_quadPt[3].t = EvVertex2( 1.0f, 0.0f);
m_quadPt[4].c = 0xff00ff00;
m_quadPt[4].t = EvVertex2(0.0f, 1.0f);
m_quadPt[5].c = 0xff00ff00;
m_quadPt[5].t = EvVertex2(1.0f, 1.0f);
m_quadPt[0].v = EvVertex4(-0.5f, -0.5f, 1.0f, 1.0f);
m_quadPt[1].v = EvVertex4(-0.5, m_d3dsdBackBuffer.Height-0.5f, 1.0f, 1.0f);
m_quadPt[2].v = EvVertex4(m_d3dsdBackBuffer.Width-0.5f, -0.5f, 1.0f, 1.0f);
m_quadPt[3].v = EvVertex4(m_d3dsdBackBuffer.Width-0.5f, -0.5f, 1.0f, 1.0f);
m_quadPt[4].v = EvVertex4(-0.5, m_d3dsdBackBuffer.Height-0.5f, 1.0f, 1.0f);
m_quadPt[5].v = EvVertex4(m_d3dsdBackBuffer.Width-0.5f, m_d3dsdBackBuffer.Height-0.5f, 1.0f, 1.0f);
//--------------------------------------------------------------------------------------
if(m_pEffectFileName == "Glow.fx")
{
if (m_texPostProcessID==0)
{
m_texPostProcessID = CreateTextureRenderTarget(m_d3dsdBackBuffer.Width, m_d3dsdBackBuffer.Height, true);
}
if (m_texPostProcessRenderTarget==0)
{
m_texPostProcessRenderTarget = CreateTextureRenderTarget(m_d3dsdBackBuffer.Width, m_d3dsdBackBuffer.Height, true);
}
if(m_texPostProcessRenderTarget1 == 0)
{
m_texPostProcessRenderTarget1 = CreateTextureRenderTarget(m_d3dsdBackBuffer.Width, m_d3dsdBackBuffer.Height, true);
}
}
EvgDevice::SetRenderTarget(m_texPostProcessID, -1);
if(FAILED( hr=m_pd3dDevice->Clear( 0L, NULL, dwFlag, m_dwClearColor, 1.0f, 0L )))
{
return DisplayErrorMsg(hr, MSGERR_APPMUSTEXIT);
}
this->OnBeginRender();
//开始渲染场景
this->OnRenderScene();
{
SaveRenderTargetToFile("d:/a.bmp"); //这里保存之后,a.bmp中的内容就是场景的内容
RestoreRenderTarget();
if(m_pEffectFileName == "Glow.fx")
{
//第一遍渲染,得到场景的亮度
UINT passNum = 0;
EvgDevice::SetRenderTarget(m_texPostProcessRenderTarget, -1);
m_pd3dDevice->Clear( 0L, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, m_dwClearColor,1.0f, 0L );
//以下是设置cullMode 为NULL,顶点的格式为:XYZW,DIFFUSE和TEXCOORD
shader.bTwoSide = true;
m_bCullFace = TRUE;
SetVertexFormat(EVG_TRANSFORMED_VCT);
shader.iNumStage = 1;
shader.Shaders[0].SetTexture(m_texPostProcessID);
SetShader(&shader);
//-------------------设置完毕---------------------------------------
pTechnique = GetTechniqueByName(m_pCurEffect,"RenderScene");
UseTechnique(m_pCurEffect,pTechnique);
SetTexture(m_pCurEffect,"g_sceneTex",m_texPostProcessID);
CommitChanges(m_pCurEffect);
BeginTechnique(m_pCurEffect,&passNum);
for(int i = 0; i<passNum; i++)
{
BeginPass(m_pCurEffect,i);
m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST,2,(void*)&m_quadPt[0],sizeof(EvgNVertexVCT));
EndPass(m_pCurEffect);
}
EndTechnique(m_pCurEffect);
RestoreShader(&shader);
SaveRenderTargetToFile("d:/b.bmp"); //这里保存之后,b.bmp图中的内容为清除色,已经不对了
RestoreRenderTarget();
//因前面有问题,后面代码就不用看了,肯定是不对的
//前面为什么没有渲染到m_texPostProcessRenderTarget纹理中?
}
}
//开始渲染UI
this->OnRenderUI();
this->OnEndRender();
} |
|