MCPcopy Create free account
hub / github.com/9chu/LuaSTGPlus / PostEffect

Method PostEffect

LuaSTGPlus/AppFrame.cpp:1067–1154  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1065}
1066
1067bool AppFrame::PostEffect(fcyRefPointer<f2dTexture2D> rt, ResFX* shader, BlendMode blend)LNOEXCEPT
1068{
1069 f2dEffectTechnique* pTechnique = shader->GetEffect()->GetTechnique(0U);
1070
1071 if (!pTechnique)
1072 {
1073 LERROR("PostEffect: 无效的Shader数据");
1074 return false;
1075 }
1076
1077 // 纹理使用检查
1078 if (CheckRenderTargetInUse(rt))
1079 {
1080 LERROR("PostEffect: 无法在一个RenderTarget正在使用时作为后处理输入");
1081 return false;
1082 }
1083
1084 // 终止渲染过程
1085 bool bRestartRenderPeriod = false;
1086 switch (m_GraphType)
1087 {
1088 case GraphicsType::Graph2D:
1089 if (m_Graph2D->IsInRender())
1090 {
1091 bRestartRenderPeriod = true;
1092 m_Graph2D->End();
1093 }
1094 break;
1095 case GraphicsType::Graph3D:
1096 if (m_Graph3D->IsInRender())
1097 {
1098 bRestartRenderPeriod = true;
1099 m_Graph3D->End();
1100 }
1101 break;
1102 }
1103
1104 // 更新渲染状态
1105 updateGraph3DBlendMode(blend);
1106
1107 // 关闭fog
1108 IDirect3DDevice9* pDev = (IDirect3DDevice9*)m_pRenderDev->GetHandle();
1109 DWORD iFogEnabled = FALSE;
1110 pDev->GetRenderState(D3DRS_FOGENABLE, &iFogEnabled);
1111 if (iFogEnabled == TRUE)
1112 pDev->SetRenderState(D3DRS_FOGENABLE, FALSE);
1113
1114 // 设置effect
1115 shader->SetPostEffectTexture(rt);
1116 shader->SetViewport(m_pRenderDev->GetViewport());
1117 shader->SetScreenSize(fcyVec2((float)m_pRenderDev->GetBufferWidth(), (float)m_pRenderDev->GetBufferHeight()));
1118 m_Graph3D->SetEffect(shader->GetEffect());
1119 if (FCYFAILED(m_Graph3D->Begin()))
1120 {
1121 // ! 异常退出不可恢复渲染过程
1122 LERROR("PostEffect: 内部错误 (f2dGraphics3D::Begin failed)");
1123 return false;
1124 }

Callers

nothing calls this directly

Calls 4

GetEffectMethod · 0.80
SetPostEffectTextureMethod · 0.80
SetScreenSizeMethod · 0.80
SetViewportMethod · 0.45

Tested by

no test coverage detected