History

cleaning

ericrius1 committed 11 years ago

Commit 47bc8f52 parents b4a9469 b46a430452 files · +16984 −14547Browse files

Showing the changes to libraries/render-utils/src/RenderDeferredTask.cpp (1 of 452 files). Show all

Unified · Split

libraries/render-utils/src/RenderDeferredTask.cpp+58−34
@@ -1,3 +1,4 @@
1
1//2//
2// RenderDeferredTask.cpp3// RenderDeferredTask.cpp
3// render-utils/src/4// render-utils/src/
@@ -10,23 +11,44 @@ · 6 unmodified lines
10//11//
11#include "RenderDeferredTask.h"12#include "RenderDeferredTask.h"
12 13
13#include "gpu/Batch.h"14#include <PerfStat.h>
14#include "gpu/Context.h"15#include <RenderArgs.h>
16#include <ViewFrustum.h>
17#include <gpu/Context.h>
18
19#include "FramebufferCache.h"
15#include "DeferredLightingEffect.h"20#include "DeferredLightingEffect.h"
16#include "ViewFrustum.h"
17#include "RenderArgs.h"
18#include "TextureCache.h"21#include "TextureCache.h"
19#include "HitEffect.h"22#include "HitEffect.h"
20 23
21#include "render/DrawStatus.h"24#include "render/DrawStatus.h"
22 25#include "AmbientOcclusionEffect.h"
23#include <PerfStat.h>
24 26
25#include "overlay3D_vert.h"27#include "overlay3D_vert.h"
26#include "overlay3D_frag.h"28#include "overlay3D_frag.h"
27 29
28using namespace render;30using namespace render;
29 31
32void SetupDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
33 RenderArgs* args = renderContext->args;
34
35 auto primaryFbo = DependencyManager::get<FramebufferCache>()->getPrimaryFramebufferDepthColor();
36
37 gpu::Batch batch;
38 batch.setFramebuffer(nullptr);
39 batch.setFramebuffer(primaryFbo);
40
41 batch.setViewportTransform(args->_viewport);
42 batch.setStateScissorRect(args->_viewport);
43
44 batch.clearFramebuffer(
45 gpu::Framebuffer::BUFFER_COLOR0 |
46 gpu::Framebuffer::BUFFER_DEPTH,
47 vec4(vec3(0), 1), 1.0, 0.0, true);
48
49 args->_context->render(batch);
50}
51
30void PrepareDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {52void PrepareDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
31 DependencyManager::get<DeferredLightingEffect>()->prepare(renderContext->args);53 DependencyManager::get<DeferredLightingEffect>()->prepare(renderContext->args);
32}54}
@@ -41,6 +63,7 @@ void ResolveDeferred::run(const SceneContextPointer& sceneContext, const RenderC · 8 unmodified lines
41}63}
42 64
43RenderDeferredTask::RenderDeferredTask() : Task() {65RenderDeferredTask::RenderDeferredTask() : Task() {
66 _jobs.push_back(Job(new SetupDeferred::JobModel("SetupFramebuffer")));
44 _jobs.push_back(Job(new DrawBackground::JobModel("DrawBackground")));67 _jobs.push_back(Job(new DrawBackground::JobModel("DrawBackground")));
45 68
46 _jobs.push_back(Job(new PrepareDeferred::JobModel("PrepareDeferred")));69 _jobs.push_back(Job(new PrepareDeferred::JobModel("PrepareDeferred")));
@@ -57,9 +80,13 @@ RenderDeferredTask::RenderDeferredTask() : Task() { · 10 unmodified lines
57 _jobs.push_back(Job(new DrawOpaqueDeferred::JobModel("DrawOpaqueDeferred", _jobs.back().getOutput())));80 _jobs.push_back(Job(new DrawOpaqueDeferred::JobModel("DrawOpaqueDeferred", _jobs.back().getOutput())));
58 81
59 _jobs.push_back(Job(new DrawLight::JobModel("DrawLight")));82 _jobs.push_back(Job(new DrawLight::JobModel("DrawLight")));
60 _jobs.push_back(Job(new ResetGLState::JobModel()));
61 _jobs.push_back(Job(new RenderDeferred::JobModel("RenderDeferred")));83 _jobs.push_back(Job(new RenderDeferred::JobModel("RenderDeferred")));
62 _jobs.push_back(Job(new ResolveDeferred::JobModel("ResolveDeferred")));84 _jobs.push_back(Job(new ResolveDeferred::JobModel("ResolveDeferred")));
85 _jobs.push_back(Job(new AmbientOcclusion::JobModel("AmbientOcclusion")));
86
87 _jobs.back().setEnabled(false);
88 _occlusionJobIndex = _jobs.size() - 1;
89
63 _jobs.push_back(Job(new FetchItems::JobModel("FetchTransparent",90 _jobs.push_back(Job(new FetchItems::JobModel("FetchTransparent",
64 FetchItems(91 FetchItems(
65 ItemFilter::Builder::transparentShape().withoutLayered(),92 ItemFilter::Builder::transparentShape().withoutLayered(),
@@ -73,17 +100,22 @@ RenderDeferredTask::RenderDeferredTask() : Task() { · 7 unmodified lines
73 _jobs.push_back(Job(new DrawTransparentDeferred::JobModel("TransparentDeferred", _jobs.back().getOutput())));100 _jobs.push_back(Job(new DrawTransparentDeferred::JobModel("TransparentDeferred", _jobs.back().getOutput())));
74 101
75 _jobs.push_back(Job(new render::DrawStatus::JobModel("DrawStatus", renderedOpaques)));102 _jobs.push_back(Job(new render::DrawStatus::JobModel("DrawStatus", renderedOpaques)));
103
104
76 _jobs.back().setEnabled(false);105 _jobs.back().setEnabled(false);
77 _drawStatusJobIndex = _jobs.size() - 1;106 _drawStatusJobIndex = _jobs.size() - 1;
78 107
79 _jobs.push_back(Job(new DrawOverlay3D::JobModel("DrawOverlay3D")));108 _jobs.push_back(Job(new DrawOverlay3D::JobModel("DrawOverlay3D")));
80 _jobs.push_back(Job(new ResetGLState::JobModel()));109
81 110 _jobs.push_back(Job(new HitEffect::JobModel("HitEffect")));
111 _jobs.back().setEnabled(false);
112 _drawHitEffectJobIndex = _jobs.size() -1;
113
82 114
83 // Give ourselves 3 frmaes of timer queries115 // Give ourselves 3 frmaes of timer queries
84 _timerQueries.push_back(gpu::QueryPointer(new gpu::Query()));116 _timerQueries.push_back(std::make_shared<gpu::Query>());
85 _timerQueries.push_back(gpu::QueryPointer(new gpu::Query()));117 _timerQueries.push_back(std::make_shared<gpu::Query>());
86 _timerQueries.push_back(gpu::QueryPointer(new gpu::Query()));118 _timerQueries.push_back(std::make_shared<gpu::Query>());
87 _currentTimerQueryIndex = 0;119 _currentTimerQueryIndex = 0;
88}120}
89 121
@@ -105,6 +137,13 @@ void RenderDeferredTask::run(const SceneContextPointer& sceneContext, const Rend · 15 unmodified lines
105 137
106 // Make sure we turn the displayItemStatus on/off138 // Make sure we turn the displayItemStatus on/off
107 setDrawItemStatus(renderContext->_drawItemStatus);139 setDrawItemStatus(renderContext->_drawItemStatus);
140
141 //Make sure we display hit effect on screen, as desired from a script
142 setDrawHitEffect(renderContext->_drawHitEffect);
143
144
145 // TODO: turn on/off AO through menu item
146 setOcclusionStatus(renderContext->_occlusionStatus);
108 147
109 renderContext->args->_context->syncCache();148 renderContext->args->_context->syncCache();
110 149
@@ -135,21 +174,12 @@ void DrawOpaqueDeferred::run(const SceneContextPointer& sceneContext, const Rend · 24 unmodified lines
135 batch.setViewTransform(viewMat);174 batch.setViewTransform(viewMat);
136 175
137 {176 {
138 GLenum buffers[3];
139 int bufferCount = 0;
140 buffers[bufferCount++] = GL_COLOR_ATTACHMENT0;
141 buffers[bufferCount++] = GL_COLOR_ATTACHMENT1;
142 buffers[bufferCount++] = GL_COLOR_ATTACHMENT2;
143 batch._glDrawBuffers(bufferCount, buffers);
144 const float OPAQUE_ALPHA_THRESHOLD = 0.5f;177 const float OPAQUE_ALPHA_THRESHOLD = 0.5f;
145 args->_alphaThreshold = OPAQUE_ALPHA_THRESHOLD;178 args->_alphaThreshold = OPAQUE_ALPHA_THRESHOLD;
146 }179 }
147 180
148 renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnOpaqueItems);181 renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnOpaqueItems);
149 182
150 // Before rendering the batch make sure we re in sync with gl state
151 args->_context->syncCache();
152 renderContext->args->_context->syncCache();
153 args->_context->render((*args->_batch));183 args->_context->render((*args->_batch));
154 args->_batch = nullptr;184 args->_batch = nullptr;
155}185}
@@ -173,21 +203,15 @@ void DrawTransparentDeferred::run(const SceneContextPointer& sceneContext, const · 17 unmodified lines
173 }203 }
174 batch.setProjectionTransform(projMat);204 batch.setProjectionTransform(projMat);
175 batch.setViewTransform(viewMat);205 batch.setViewTransform(viewMat);
176 const float TRANSPARENT_ALPHA_THRESHOLD = 0.0f;
177 206
178 {207 {
179 GLenum buffers[3];208 const float TRANSPARENT_ALPHA_THRESHOLD = 0.0f;
180 int bufferCount = 0;
181 buffers[bufferCount++] = GL_COLOR_ATTACHMENT0;
182 batch._glDrawBuffers(bufferCount, buffers);
183 args->_alphaThreshold = TRANSPARENT_ALPHA_THRESHOLD;209 args->_alphaThreshold = TRANSPARENT_ALPHA_THRESHOLD;
184 }210 }
185 211
186 212
187 renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnTransparentItems);213 renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnTransparentItems);
188 214
189 // Before rendering the batch make sure we re in sync with gl state
190 args->_context->syncCache();
191 args->_context->render((*args->_batch));215 args->_context->render((*args->_batch));
192 args->_batch = nullptr;216 args->_batch = nullptr;
193}217}
@@ -198,8 +222,8 @@ const gpu::PipelinePointer& DrawOverlay3D::getOpaquePipeline() { · 4 unmodified lines
198 auto vs = gpu::ShaderPointer(gpu::Shader::createVertex(std::string(overlay3D_vert)));222 auto vs = gpu::ShaderPointer(gpu::Shader::createVertex(std::string(overlay3D_vert)));
199 auto ps = gpu::ShaderPointer(gpu::Shader::createPixel(std::string(overlay3D_frag)));223 auto ps = gpu::ShaderPointer(gpu::Shader::createPixel(std::string(overlay3D_frag)));
200 auto program = gpu::ShaderPointer(gpu::Shader::createProgram(vs, ps));224 auto program = gpu::ShaderPointer(gpu::Shader::createProgram(vs, ps));
201 225
202 auto state = gpu::StatePointer(new gpu::State());226 auto state = std::make_shared<gpu::State>();
203 state->setDepthTest(true, true, gpu::LESS_EQUAL);227 state->setDepthTest(true, true, gpu::LESS_EQUAL);
204 228
205 _opaquePipeline.reset(gpu::Pipeline::create(program, state));229 _opaquePipeline.reset(gpu::Pipeline::create(program, state));
@@ -241,17 +265,17 @@ void DrawOverlay3D::run(const SceneContextPointer& sceneContext, const RenderCon · 35 unmodified lines
241 }265 }
242 batch.setProjectionTransform(projMat);266 batch.setProjectionTransform(projMat);
243 batch.setViewTransform(viewMat);267 batch.setViewTransform(viewMat);
268 batch.setViewportTransform(args->_viewport);
269 batch.setStateScissorRect(args->_viewport);
244 270
245 batch.setPipeline(getOpaquePipeline());271 batch.setPipeline(getOpaquePipeline());
246 batch.setResourceTexture(0, args->_whiteTexture);272 batch.setResourceTexture(0, args->_whiteTexture);
247 273
248 if (!inItems.empty()) {274 if (!inItems.empty()) {
249 batch.clearFramebuffer(gpu::Framebuffer::BUFFER_DEPTH, glm::vec4(), 1.f, 0);275 batch.clearFramebuffer(gpu::Framebuffer::BUFFER_DEPTH, glm::vec4(), 1.f, 0, true);
250 renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnOverlay3DItems);276 renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnOverlay3DItems);
251 }277 }
252 278
253 // Before rendering the batch make sure we re in sync with gl state
254 args->_context->syncCache();
255 args->_context->render((*args->_batch));279 args->_context->render((*args->_batch));
256 args->_batch = nullptr;280 args->_batch = nullptr;
257 args->_whiteTexture.reset();281 args->_whiteTexture.reset();