History

fixed merge conflicts and refactored hit effect to catch up with refactored rendering engine

ericrius1 committed 11 years ago

Commit 697cb4c2 parents 469bace 6a5c298406 files · +11309 −11832Browse files

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

Unified · Split

libraries/render-utils/src/RenderDeferredTask.cpp+52−32
@@ -1,3 +1,4 @@
1+
12 //
23 // RenderDeferredTask.cpp
34 // render-utils/src/
@@ -10,23 +11,46 @@ · 6 unmodified lines
1011 //
1112 #include "RenderDeferredTask.h"
1213
13−#include "gpu/Batch.h"
14−#include "gpu/Context.h"
14+#include <gpu/GPUConfig.h>
15+#include <gpu/Batch.h>
16+#include <gpu/Context.h>
17+#include <PerfStat.h>
18+#include <RenderArgs.h>
19+#include <ViewFrustum.h>
20+
21+#include "FramebufferCache.h"
1522 #include "DeferredLightingEffect.h"
16−#include "ViewFrustum.h"
17−#include "RenderArgs.h"
1823 #include "TextureCache.h"
1924 #include "HitEffect.h"
2025
2126 #include "render/DrawStatus.h"
22−
23−#include <PerfStat.h>
27+#include "AmbientOcclusionEffect.h"
2428
2529 #include "overlay3D_vert.h"
2630 #include "overlay3D_frag.h"
2731
2832 using namespace render;
2933
34+void SetupDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
35+ RenderArgs* args = renderContext->args;
36+
37+ auto primaryFbo = DependencyManager::get<FramebufferCache>()->getPrimaryFramebufferDepthColor();
38+
39+ gpu::Batch batch;
40+ batch.setFramebuffer(nullptr);
41+ batch.setFramebuffer(primaryFbo);
42+
43+ batch.setViewportTransform(args->_viewport);
44+ batch.setStateScissorRect(args->_viewport);
45+
46+ batch.clearFramebuffer(
47+ gpu::Framebuffer::BUFFER_COLOR0 |
48+ gpu::Framebuffer::BUFFER_DEPTH,
49+ vec4(vec3(0), 1), 1.0, 0.0, true);
50+
51+ args->_context->render(batch);
52+}
53+
3054 void PrepareDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
3155 DependencyManager::get<DeferredLightingEffect>()->prepare(renderContext->args);
3256 }
@@ -41,6 +65,7 @@ void ResolveDeferred::run(const SceneContextPointer& sceneContext, const RenderC · 8 unmodified lines
4165 }
4266
4367 RenderDeferredTask::RenderDeferredTask() : Task() {
68+ _jobs.push_back(Job(new SetupDeferred::JobModel("SetupFramebuffer")));
4469 _jobs.push_back(Job(new DrawBackground::JobModel("DrawBackground")));
4570
4671 _jobs.push_back(Job(new PrepareDeferred::JobModel("PrepareDeferred")));
@@ -57,9 +82,13 @@ RenderDeferredTask::RenderDeferredTask() : Task() { · 10 unmodified lines
5782 _jobs.push_back(Job(new DrawOpaqueDeferred::JobModel("DrawOpaqueDeferred", _jobs.back().getOutput())));
5883
5984 _jobs.push_back(Job(new DrawLight::JobModel("DrawLight")));
60− _jobs.push_back(Job(new ResetGLState::JobModel()));
6185 _jobs.push_back(Job(new RenderDeferred::JobModel("RenderDeferred")));
6286 _jobs.push_back(Job(new ResolveDeferred::JobModel("ResolveDeferred")));
87+ _jobs.push_back(Job(new AmbientOcclusion::JobModel("AmbientOcclusion")));
88+
89+ _jobs.back().setEnabled(false);
90+ _occlusionJobIndex = _jobs.size() - 1;
91+
6392 _jobs.push_back(Job(new FetchItems::JobModel("FetchTransparent",
6493 FetchItems(
6594 ItemFilter::Builder::transparentShape().withoutLayered(),
@@ -73,6 +102,8 @@ RenderDeferredTask::RenderDeferredTask() : Task() { · 7 unmodified lines
73102 _jobs.push_back(Job(new DrawTransparentDeferred::JobModel("TransparentDeferred", _jobs.back().getOutput())));
74103
75104 _jobs.push_back(Job(new render::DrawStatus::JobModel("DrawStatus", renderedOpaques)));
105+
106+
76107 _jobs.back().setEnabled(false);
77108 _drawStatusJobIndex = _jobs.size() - 1;
78109
@@ -81,13 +112,14 @@ RenderDeferredTask::RenderDeferredTask() : Task() { · 2 unmodified lines
81112 _jobs.back().setEnabled(false);
82113 _drawHitEffectJobIndex = _jobs.size() -1;
83114
115+
84116 _jobs.push_back(Job(new ResetGLState::JobModel()));
85117
86118
87119 // Give ourselves 3 frmaes of timer queries
88− _timerQueries.push_back(gpu::QueryPointer(new gpu::Query()));
89− _timerQueries.push_back(gpu::QueryPointer(new gpu::Query()));
90− _timerQueries.push_back(gpu::QueryPointer(new gpu::Query()));
120+ _timerQueries.push_back(std::make_shared<gpu::Query>());
121+ _timerQueries.push_back(std::make_shared<gpu::Query>());
122+ _timerQueries.push_back(std::make_shared<gpu::Query>());
91123 _currentTimerQueryIndex = 0;
92124 }
93125
@@ -114,6 +146,9 @@ void RenderDeferredTask::run(const SceneContextPointer& sceneContext, const Rend · 20 unmodified lines
114146 setDrawHitEffect(renderContext->_drawHitEffect);
115147
116148
149+ // TODO: turn on/off AO through menu item
150+ setOcclusionStatus(renderContext->_occlusionStatus);
151+
117152 renderContext->args->_context->syncCache();
118153
119154 for (auto job : _jobs) {
@@ -143,21 +178,12 @@ void DrawOpaqueDeferred::run(const SceneContextPointer& sceneContext, const Rend · 23 unmodified lines
143178 batch.setViewTransform(viewMat);
144179
145180 {
146− GLenum buffers[3];
147− int bufferCount = 0;
148− buffers[bufferCount++] = GL_COLOR_ATTACHMENT0;
149− buffers[bufferCount++] = GL_COLOR_ATTACHMENT1;
150− buffers[bufferCount++] = GL_COLOR_ATTACHMENT2;
151− batch._glDrawBuffers(bufferCount, buffers);
152181 const float OPAQUE_ALPHA_THRESHOLD = 0.5f;
153182 args->_alphaThreshold = OPAQUE_ALPHA_THRESHOLD;
154183 }
155184
156185 renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnOpaqueItems);
157186
158− // Before rendering the batch make sure we re in sync with gl state
159− args->_context->syncCache();
160− renderContext->args->_context->syncCache();
161187 args->_context->render((*args->_batch));
162188 args->_batch = nullptr;
163189 }
@@ -181,21 +207,15 @@ void DrawTransparentDeferred::run(const SceneContextPointer& sceneContext, const · 17 unmodified lines
181207 }
182208 batch.setProjectionTransform(projMat);
183209 batch.setViewTransform(viewMat);
184− const float TRANSPARENT_ALPHA_THRESHOLD = 0.0f;
185210
186211 {
187− GLenum buffers[3];
188− int bufferCount = 0;
189− buffers[bufferCount++] = GL_COLOR_ATTACHMENT0;
190− batch._glDrawBuffers(bufferCount, buffers);
212+ const float TRANSPARENT_ALPHA_THRESHOLD = 0.0f;
191213 args->_alphaThreshold = TRANSPARENT_ALPHA_THRESHOLD;
192214 }
193215
194216
195217 renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnTransparentItems);
196−
197− // Before rendering the batch make sure we re in sync with gl state
198− args->_context->syncCache();
218+
199219 args->_context->render((*args->_batch));
200220 args->_batch = nullptr;
201221 }
@@ -206,8 +226,8 @@ const gpu::PipelinePointer& DrawOverlay3D::getOpaquePipeline() { · 4 unmodified lines
206226 auto vs = gpu::ShaderPointer(gpu::Shader::createVertex(std::string(overlay3D_vert)));
207227 auto ps = gpu::ShaderPointer(gpu::Shader::createPixel(std::string(overlay3D_frag)));
208228 auto program = gpu::ShaderPointer(gpu::Shader::createProgram(vs, ps));
209−
210− auto state = gpu::StatePointer(new gpu::State());
229+
230+ auto state = std::make_shared<gpu::State>();
211231 state->setDepthTest(true, true, gpu::LESS_EQUAL);
212232
213233 _opaquePipeline.reset(gpu::Pipeline::create(program, state));
@@ -249,17 +269,17 @@ void DrawOverlay3D::run(const SceneContextPointer& sceneContext, const RenderCon · 35 unmodified lines
249269 }
250270 batch.setProjectionTransform(projMat);
251271 batch.setViewTransform(viewMat);
272+ batch.setViewportTransform(args->_viewport);
273+ batch.setStateScissorRect(args->_viewport);
252274
253275 batch.setPipeline(getOpaquePipeline());
254276 batch.setResourceTexture(0, args->_whiteTexture);
255277
256278 if (!inItems.empty()) {
257− batch.clearFramebuffer(gpu::Framebuffer::BUFFER_DEPTH, glm::vec4(), 1.f, 0);
279+ batch.clearFramebuffer(gpu::Framebuffer::BUFFER_DEPTH, glm::vec4(), 1.f, 0, true);
258280 renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnOverlay3DItems);
259281 }
260282
261− // Before rendering the batch make sure we re in sync with gl state
262− args->_context->syncCache();
263283 args->_context->render((*args->_batch));
264284 args->_batch = nullptr;
265285 args->_whiteTexture.reset();