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
1//2//
2// RenderDeferredTask.cpp3// RenderDeferredTask.cpp
3// render-utils/src/4// render-utils/src/
@@ -10,23 +11,46 @@ · 6 unmodified lines
10//11//
11#include "RenderDeferredTask.h"12#include "RenderDeferredTask.h"
12 13
13#include "gpu/Batch.h"14#include <gpu/GPUConfig.h>
14#include "gpu/Context.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"
15#include "DeferredLightingEffect.h"22#include "DeferredLightingEffect.h"
16#include "ViewFrustum.h"
17#include "RenderArgs.h"
18#include "TextureCache.h"23#include "TextureCache.h"
19#include "HitEffect.h"24#include "HitEffect.h"
20 25
21#include "render/DrawStatus.h"26#include "render/DrawStatus.h"
22 27#include "AmbientOcclusionEffect.h"
23#include <PerfStat.h>
24 28
25#include "overlay3D_vert.h"29#include "overlay3D_vert.h"
26#include "overlay3D_frag.h"30#include "overlay3D_frag.h"
27 31
28using namespace render;32using namespace render;
29 33
34void 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
30void PrepareDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {54void PrepareDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
31 DependencyManager::get<DeferredLightingEffect>()->prepare(renderContext->args);55 DependencyManager::get<DeferredLightingEffect>()->prepare(renderContext->args);
32}56}
@@ -41,6 +65,7 @@ void ResolveDeferred::run(const SceneContextPointer& sceneContext, const RenderC · 8 unmodified lines
41}65}
42 66
43RenderDeferredTask::RenderDeferredTask() : Task() {67RenderDeferredTask::RenderDeferredTask() : Task() {
68 _jobs.push_back(Job(new SetupDeferred::JobModel("SetupFramebuffer")));
44 _jobs.push_back(Job(new DrawBackground::JobModel("DrawBackground")));69 _jobs.push_back(Job(new DrawBackground::JobModel("DrawBackground")));
45 70
46 _jobs.push_back(Job(new PrepareDeferred::JobModel("PrepareDeferred")));71 _jobs.push_back(Job(new PrepareDeferred::JobModel("PrepareDeferred")));
@@ -57,9 +82,13 @@ RenderDeferredTask::RenderDeferredTask() : Task() { · 10 unmodified lines
57 _jobs.push_back(Job(new DrawOpaqueDeferred::JobModel("DrawOpaqueDeferred", _jobs.back().getOutput())));82 _jobs.push_back(Job(new DrawOpaqueDeferred::JobModel("DrawOpaqueDeferred", _jobs.back().getOutput())));
58 83
59 _jobs.push_back(Job(new DrawLight::JobModel("DrawLight")));84 _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")));85 _jobs.push_back(Job(new RenderDeferred::JobModel("RenderDeferred")));
62 _jobs.push_back(Job(new ResolveDeferred::JobModel("ResolveDeferred")));86 _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
63 _jobs.push_back(Job(new FetchItems::JobModel("FetchTransparent",92 _jobs.push_back(Job(new FetchItems::JobModel("FetchTransparent",
64 FetchItems(93 FetchItems(
65 ItemFilter::Builder::transparentShape().withoutLayered(),94 ItemFilter::Builder::transparentShape().withoutLayered(),
@@ -73,6 +102,8 @@ RenderDeferredTask::RenderDeferredTask() : Task() { · 7 unmodified lines
73 _jobs.push_back(Job(new DrawTransparentDeferred::JobModel("TransparentDeferred", _jobs.back().getOutput())));102 _jobs.push_back(Job(new DrawTransparentDeferred::JobModel("TransparentDeferred", _jobs.back().getOutput())));
74 103
75 _jobs.push_back(Job(new render::DrawStatus::JobModel("DrawStatus", renderedOpaques)));104 _jobs.push_back(Job(new render::DrawStatus::JobModel("DrawStatus", renderedOpaques)));
105
106
76 _jobs.back().setEnabled(false);107 _jobs.back().setEnabled(false);
77 _drawStatusJobIndex = _jobs.size() - 1;108 _drawStatusJobIndex = _jobs.size() - 1;
78 109
@@ -81,13 +112,14 @@ RenderDeferredTask::RenderDeferredTask() : Task() { · 2 unmodified lines
81 _jobs.back().setEnabled(false);112 _jobs.back().setEnabled(false);
82 _drawHitEffectJobIndex = _jobs.size() -1;113 _drawHitEffectJobIndex = _jobs.size() -1;
83 114
115
84 _jobs.push_back(Job(new ResetGLState::JobModel()));116 _jobs.push_back(Job(new ResetGLState::JobModel()));
85 117
86 118
87 // Give ourselves 3 frmaes of timer queries119 // Give ourselves 3 frmaes of timer queries
88 _timerQueries.push_back(gpu::QueryPointer(new gpu::Query()));120 _timerQueries.push_back(std::make_shared<gpu::Query>());
89 _timerQueries.push_back(gpu::QueryPointer(new gpu::Query()));121 _timerQueries.push_back(std::make_shared<gpu::Query>());
90 _timerQueries.push_back(gpu::QueryPointer(new gpu::Query()));122 _timerQueries.push_back(std::make_shared<gpu::Query>());
91 _currentTimerQueryIndex = 0;123 _currentTimerQueryIndex = 0;
92}124}
93 125
@@ -114,6 +146,9 @@ void RenderDeferredTask::run(const SceneContextPointer& sceneContext, const Rend · 20 unmodified lines
114 setDrawHitEffect(renderContext->_drawHitEffect);146 setDrawHitEffect(renderContext->_drawHitEffect);
115 147
116 148
149 // TODO: turn on/off AO through menu item
150 setOcclusionStatus(renderContext->_occlusionStatus);
151
117 renderContext->args->_context->syncCache();152 renderContext->args->_context->syncCache();
118 153
119 for (auto job : _jobs) {154 for (auto job : _jobs) {
@@ -143,21 +178,12 @@ void DrawOpaqueDeferred::run(const SceneContextPointer& sceneContext, const Rend · 23 unmodified lines
143 batch.setViewTransform(viewMat);178 batch.setViewTransform(viewMat);
144 179
145 {180 {
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);
152 const float OPAQUE_ALPHA_THRESHOLD = 0.5f;181 const float OPAQUE_ALPHA_THRESHOLD = 0.5f;
153 args->_alphaThreshold = OPAQUE_ALPHA_THRESHOLD;182 args->_alphaThreshold = OPAQUE_ALPHA_THRESHOLD;
154 }183 }
155 184
156 renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnOpaqueItems);185 renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnOpaqueItems);
157 186
158 // Before rendering the batch make sure we re in sync with gl state
159 args->_context->syncCache();
160 renderContext->args->_context->syncCache();
161 args->_context->render((*args->_batch));187 args->_context->render((*args->_batch));
162 args->_batch = nullptr;188 args->_batch = nullptr;
163}189}
@@ -181,21 +207,15 @@ void DrawTransparentDeferred::run(const SceneContextPointer& sceneContext, const · 17 unmodified lines
181 }207 }
182 batch.setProjectionTransform(projMat);208 batch.setProjectionTransform(projMat);
183 batch.setViewTransform(viewMat);209 batch.setViewTransform(viewMat);
184 const float TRANSPARENT_ALPHA_THRESHOLD = 0.0f;
185 210
186 {211 {
187 GLenum buffers[3];212 const float TRANSPARENT_ALPHA_THRESHOLD = 0.0f;
188 int bufferCount = 0;
189 buffers[bufferCount++] = GL_COLOR_ATTACHMENT0;
190 batch._glDrawBuffers(bufferCount, buffers);
191 args->_alphaThreshold = TRANSPARENT_ALPHA_THRESHOLD;213 args->_alphaThreshold = TRANSPARENT_ALPHA_THRESHOLD;
192 }214 }
193 215
194 216
195 renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnTransparentItems);217 renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnTransparentItems);
196 218
197 // Before rendering the batch make sure we re in sync with gl state
198 args->_context->syncCache();
199 args->_context->render((*args->_batch));219 args->_context->render((*args->_batch));
200 args->_batch = nullptr;220 args->_batch = nullptr;
201}221}
@@ -206,8 +226,8 @@ const gpu::PipelinePointer& DrawOverlay3D::getOpaquePipeline() { · 4 unmodified lines
206 auto vs = gpu::ShaderPointer(gpu::Shader::createVertex(std::string(overlay3D_vert)));226 auto vs = gpu::ShaderPointer(gpu::Shader::createVertex(std::string(overlay3D_vert)));
207 auto ps = gpu::ShaderPointer(gpu::Shader::createPixel(std::string(overlay3D_frag)));227 auto ps = gpu::ShaderPointer(gpu::Shader::createPixel(std::string(overlay3D_frag)));
208 auto program = gpu::ShaderPointer(gpu::Shader::createProgram(vs, ps));228 auto program = gpu::ShaderPointer(gpu::Shader::createProgram(vs, ps));
209 229
210 auto state = gpu::StatePointer(new gpu::State());230 auto state = std::make_shared<gpu::State>();
211 state->setDepthTest(true, true, gpu::LESS_EQUAL);231 state->setDepthTest(true, true, gpu::LESS_EQUAL);
212 232
213 _opaquePipeline.reset(gpu::Pipeline::create(program, state));233 _opaquePipeline.reset(gpu::Pipeline::create(program, state));
@@ -249,17 +269,17 @@ void DrawOverlay3D::run(const SceneContextPointer& sceneContext, const RenderCon · 35 unmodified lines
249 }269 }
250 batch.setProjectionTransform(projMat);270 batch.setProjectionTransform(projMat);
251 batch.setViewTransform(viewMat);271 batch.setViewTransform(viewMat);
272 batch.setViewportTransform(args->_viewport);
273 batch.setStateScissorRect(args->_viewport);
252 274
253 batch.setPipeline(getOpaquePipeline());275 batch.setPipeline(getOpaquePipeline());
254 batch.setResourceTexture(0, args->_whiteTexture);276 batch.setResourceTexture(0, args->_whiteTexture);
255 277
256 if (!inItems.empty()) {278 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);
258 renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnOverlay3DItems);280 renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnOverlay3DItems);
259 }281 }
260 282
261 // Before rendering the batch make sure we re in sync with gl state
262 args->_context->syncCache();
263 args->_context->render((*args->_batch));283 args->_context->render((*args->_batch));
264 args->_batch = nullptr;284 args->_batch = nullptr;
265 args->_whiteTexture.reset();285 args->_whiteTexture.reset();