MCPcopy Create free account
hub / github.com/TombEngine/TombEngine / DrawPostprocess

Method DrawPostprocess

TombEngine/Renderer/RendererPostProcess.cpp:7–119  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5namespace TEN::Renderer
6{
7 void Renderer::DrawPostprocess(RenderTarget2D* renderTarget, RenderView& view, SceneRenderMode renderMode)
8 {
9 _doingFullscreenPass = true;
10
11 SetBlendMode(BlendMode::Opaque);
12 SetCullMode(CullMode::CounterClockwise);
13 SetDepthState(DepthState::Write);
14 _context->RSSetViewports(1, &view.Viewport);
15 ResetScissor();
16
17 float screenFadeFactor = renderMode == SceneRenderMode::Full ? ScreenFadeCurrent : 1.0f;
18 float cinematicBarsHeight = renderMode == SceneRenderMode::Full ? CinematicBarsHeight : 0.0f;
19
20 _stPostProcessBuffer.ScreenFadeFactor = screenFadeFactor;
21 _stPostProcessBuffer.CinematicBarsHeight = cinematicBarsHeight;
22 _stPostProcessBuffer.ViewportSize = Vector2i(_screenWidth, _screenHeight);
23 _stPostProcessBuffer.EffectStrength = _postProcessStrength;
24 _stPostProcessBuffer.Tint = _postProcessTint;
25 UpdateConstantBuffer(_stPostProcessBuffer, _cbPostProcessBuffer);
26
27 _context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
28 _context->IASetInputLayout(_fullscreenTriangleInputLayout.Get());
29
30 unsigned int stride = sizeof(PostProcessVertex);
31 unsigned int offset = 0;
32
33 _context->IASetVertexBuffers(0, 1, _fullscreenTriangleVertexBuffer.Buffer.GetAddressOf(), &stride, &offset);
34
35 _shaders.Bind(Shader::PostProcess);
36
37 // *** START OF POST-PROCESSING CHAIN ***
38
39 // Copy render target to post process render target. --------------------------------------------------------------------
40 float clearColor[4] = { 0.0f, 0.0f, 0.0f, 0.0f };
41 _context->ClearRenderTargetView(_postProcessRenderTarget[0].RenderTargetView.Get(), clearColor);
42 _context->OMSetRenderTargets(1, _postProcessRenderTarget[0].RenderTargetView.GetAddressOf(), nullptr);
43
44 BindRenderTargetAsTexture(TextureRegister::ColorMap, &_renderTarget, SamplerStateRegister::PointWrap);
45 DrawTriangles(3, 0);
46
47 // Ping-pong between two post-process render targets.
48 int currentRenderTarget = 0;
49 int destRenderTarget = 1;
50
51 // Lens flares ----------------------------------------------------------------------------------------------------------
52 _shaders.Bind(Shader::PostProcess);
53
54 if (!view.LensFlaresToDraw.empty())
55 {
56 _context->ClearRenderTargetView(_postProcessRenderTarget[destRenderTarget].RenderTargetView.Get(), clearColor);
57 _context->OMSetRenderTargets(1, _postProcessRenderTarget[destRenderTarget].RenderTargetView.GetAddressOf(), nullptr);
58
59 _shaders.Bind(Shader::PostProcessLensFlare);
60
61 for (int i = 0; i < view.LensFlaresToDraw.size(); i++)
62 {
63 _stPostProcessBuffer.LensFlares[i].Position = view.LensFlaresToDraw[i].Position;
64 _stPostProcessBuffer.LensFlares[i].Color = view.LensFlaresToDraw[i].Color.ToVector3();

Callers

nothing calls this directly

Calls 7

GetAddressOfMethod · 0.80
BindMethod · 0.80
Vector2iClass · 0.50
GetMethod · 0.45
emptyMethod · 0.45
sizeMethod · 0.45
ToVector3Method · 0.45

Tested by

no test coverage detected