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+
12 //
23 // RenderDeferredTask.cpp
34 // render-utils/src/
@@ -10,23 +11,44 @@ · 6 unmodified lines
1011 //
1112 #include "RenderDeferredTask.h"
1213
13−#include "gpu/Batch.h"
14−#include "gpu/Context.h"
14+#include <PerfStat.h>
15+#include <RenderArgs.h>
16+#include <ViewFrustum.h>
17+#include <gpu/Context.h>
18+
19+#include "FramebufferCache.h"
1520 #include "DeferredLightingEffect.h"
16−#include "ViewFrustum.h"
17−#include "RenderArgs.h"
1821 #include "TextureCache.h"
1922 #include "HitEffect.h"
2023
2124 #include "render/DrawStatus.h"
22−
23−#include <PerfStat.h>
25+#include "AmbientOcclusionEffect.h"
2426
2527 #include "overlay3D_vert.h"
2628 #include "overlay3D_frag.h"
2729
2830 using namespace render;
2931
32+void 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+
3052 void PrepareDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
3153 DependencyManager::get<DeferredLightingEffect>()->prepare(renderContext->args);
3254 }
@@ -41,6 +63,7 @@ void ResolveDeferred::run(const SceneContextPointer& sceneContext, const RenderC · 8 unmodified lines
4163 }
4264
4365 RenderDeferredTask::RenderDeferredTask() : Task() {
66+ _jobs.push_back(Job(new SetupDeferred::JobModel("SetupFramebuffer")));
4467 _jobs.push_back(Job(new DrawBackground::JobModel("DrawBackground")));
4568
4669 _jobs.push_back(Job(new PrepareDeferred::JobModel("PrepareDeferred")));
@@ -57,9 +80,13 @@ RenderDeferredTask::RenderDeferredTask() : Task() { · 10 unmodified lines
5780 _jobs.push_back(Job(new DrawOpaqueDeferred::JobModel("DrawOpaqueDeferred", _jobs.back().getOutput())));
5881
5982 _jobs.push_back(Job(new DrawLight::JobModel("DrawLight")));
60− _jobs.push_back(Job(new ResetGLState::JobModel()));
6183 _jobs.push_back(Job(new RenderDeferred::JobModel("RenderDeferred")));
6284 _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+
6390 _jobs.push_back(Job(new FetchItems::JobModel("FetchTransparent",
6491 FetchItems(
6592 ItemFilter::Builder::transparentShape().withoutLayered(),
@@ -73,17 +100,22 @@ RenderDeferredTask::RenderDeferredTask() : Task() { · 7 unmodified lines
73100 _jobs.push_back(Job(new DrawTransparentDeferred::JobModel("TransparentDeferred", _jobs.back().getOutput())));
74101
75102 _jobs.push_back(Job(new render::DrawStatus::JobModel("DrawStatus", renderedOpaques)));
103+
104+
76105 _jobs.back().setEnabled(false);
77106 _drawStatusJobIndex = _jobs.size() - 1;
78107
79108 _jobs.push_back(Job(new DrawOverlay3D::JobModel("DrawOverlay3D")));
80− _jobs.push_back(Job(new ResetGLState::JobModel()));
81−
109+
110+ _jobs.push_back(Job(new HitEffect::JobModel("HitEffect")));
111+ _jobs.back().setEnabled(false);
112+ _drawHitEffectJobIndex = _jobs.size() -1;
113+
82114
83115 // Give ourselves 3 frmaes of timer queries
84− _timerQueries.push_back(gpu::QueryPointer(new gpu::Query()));
85− _timerQueries.push_back(gpu::QueryPointer(new gpu::Query()));
86− _timerQueries.push_back(gpu::QueryPointer(new gpu::Query()));
116+ _timerQueries.push_back(std::make_shared<gpu::Query>());
117+ _timerQueries.push_back(std::make_shared<gpu::Query>());
118+ _timerQueries.push_back(std::make_shared<gpu::Query>());
87119 _currentTimerQueryIndex = 0;
88120 }
89121
@@ -105,6 +137,13 @@ void RenderDeferredTask::run(const SceneContextPointer& sceneContext, const Rend · 15 unmodified lines
105137
106138 // Make sure we turn the displayItemStatus on/off
107139 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);
108147
109148 renderContext->args->_context->syncCache();
110149
@@ -135,21 +174,12 @@ void DrawOpaqueDeferred::run(const SceneContextPointer& sceneContext, const Rend · 24 unmodified lines
135174 batch.setViewTransform(viewMat);
136175
137176 {
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);
144177 const float OPAQUE_ALPHA_THRESHOLD = 0.5f;
145178 args->_alphaThreshold = OPAQUE_ALPHA_THRESHOLD;
146179 }
147180
148181 renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnOpaqueItems);
149182
150− // Before rendering the batch make sure we re in sync with gl state
151− args->_context->syncCache();
152− renderContext->args->_context->syncCache();
153183 args->_context->render((*args->_batch));
154184 args->_batch = nullptr;
155185 }
@@ -173,21 +203,15 @@ void DrawTransparentDeferred::run(const SceneContextPointer& sceneContext, const · 17 unmodified lines
173203 }
174204 batch.setProjectionTransform(projMat);
175205 batch.setViewTransform(viewMat);
176− const float TRANSPARENT_ALPHA_THRESHOLD = 0.0f;
177206
178207 {
179− GLenum buffers[3];
180− int bufferCount = 0;
181− buffers[bufferCount++] = GL_COLOR_ATTACHMENT0;
182− batch._glDrawBuffers(bufferCount, buffers);
208+ const float TRANSPARENT_ALPHA_THRESHOLD = 0.0f;
183209 args->_alphaThreshold = TRANSPARENT_ALPHA_THRESHOLD;
184210 }
185211
186212
187213 renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnTransparentItems);
188−
189− // Before rendering the batch make sure we re in sync with gl state
190− args->_context->syncCache();
214+
191215 args->_context->render((*args->_batch));
192216 args->_batch = nullptr;
193217 }
@@ -198,8 +222,8 @@ const gpu::PipelinePointer& DrawOverlay3D::getOpaquePipeline() { · 4 unmodified lines
198222 auto vs = gpu::ShaderPointer(gpu::Shader::createVertex(std::string(overlay3D_vert)));
199223 auto ps = gpu::ShaderPointer(gpu::Shader::createPixel(std::string(overlay3D_frag)));
200224 auto program = gpu::ShaderPointer(gpu::Shader::createProgram(vs, ps));
201−
202− auto state = gpu::StatePointer(new gpu::State());
225+
226+ auto state = std::make_shared<gpu::State>();
203227 state->setDepthTest(true, true, gpu::LESS_EQUAL);
204228
205229 _opaquePipeline.reset(gpu::Pipeline::create(program, state));
@@ -241,17 +265,17 @@ void DrawOverlay3D::run(const SceneContextPointer& sceneContext, const RenderCon · 35 unmodified lines
241265 }
242266 batch.setProjectionTransform(projMat);
243267 batch.setViewTransform(viewMat);
268+ batch.setViewportTransform(args->_viewport);
269+ batch.setStateScissorRect(args->_viewport);
244270
245271 batch.setPipeline(getOpaquePipeline());
246272 batch.setResourceTexture(0, args->_whiteTexture);
247273
248274 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);
250276 renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnOverlay3DItems);
251277 }
252278
253− // Before rendering the batch make sure we re in sync with gl state
254− args->_context->syncCache();
255279 args->_context->render((*args->_batch));
256280 args->_batch = nullptr;
257281 args->_whiteTexture.reset();