mirror of
https://github.com/lubosz/overte.git
synced 2025-04-26 16:55:31 +02:00
Fixing transparency that i just broke
This commit is contained in:
parent
5d33cd00b3
commit
fb42613344
3 changed files with 37 additions and 306 deletions
libraries
|
@ -25,54 +25,34 @@
|
|||
using namespace render;
|
||||
|
||||
void PrepareDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
|
||||
PerformanceTimer perfTimer("PrepareDeferred");
|
||||
DependencyManager::get<DeferredLightingEffect>()->prepare(renderContext->args);
|
||||
}
|
||||
|
||||
void RenderDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
|
||||
PerformanceTimer perfTimer("RenderDeferred");
|
||||
DependencyManager::get<DeferredLightingEffect>()->render(renderContext->args);
|
||||
// renderContext->args->_context->syncCache();
|
||||
}
|
||||
|
||||
void ResolveDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
|
||||
PerformanceTimer perfTimer("ResolveDeferred");
|
||||
DependencyManager::get<DeferredLightingEffect>()->copyBack(renderContext->args);
|
||||
renderContext->args->_context->syncCache();
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
RenderDeferredTask::RenderDeferredTask() : Task() {
|
||||
_jobs.push_back(Job(PrepareDeferred()));
|
||||
_jobs.push_back(Job(DrawBackground()));
|
||||
_jobs.push_back(Job(DrawOpaqueDeferred()));
|
||||
_jobs.push_back(Job(DrawLight()));
|
||||
_jobs.push_back(Job(ResetGLState()));
|
||||
_jobs.push_back(Job(RenderDeferred()));
|
||||
_jobs.push_back(Job(ResolveDeferred()));
|
||||
_jobs.push_back(Job(DrawTransparentDeferred()));
|
||||
_jobs.push_back(Job(DrawOverlay3D()));
|
||||
_jobs.push_back(Job(ResetGLState()));
|
||||
}
|
||||
*/
|
||||
RenderDeferredTask::RenderDeferredTask() : Task() {
|
||||
_jobs.push_back(Job(new PrepareDeferred::JobModel()));
|
||||
_jobs.push_back(Job(new DrawBackground::JobModel()));
|
||||
_jobs.push_back(Job(new FetchItems::JobModel(FetchItems())));
|
||||
_jobs.push_back(Job(new CullItems::JobModel(_jobs.back().getOutput())));
|
||||
_jobs.push_back(Job(new DepthSortItems::JobModel(_jobs.back().getOutput())));
|
||||
_jobs.push_back(Job(new DrawOpaqueDeferred::JobModel(_jobs.back().getOutput())));
|
||||
_jobs.push_back(Job(new DrawLight::JobModel()));
|
||||
_jobs.push_back(Job(new PrepareDeferred::JobModel("PrepareDeferred")));
|
||||
_jobs.push_back(Job(new DrawBackground::JobModel("DrawBackground")));
|
||||
_jobs.push_back(Job(new FetchItems::JobModel("FetchOpaque", FetchItems())));
|
||||
_jobs.push_back(Job(new CullItems::JobModel("CullOpaque", _jobs.back().getOutput())));
|
||||
_jobs.push_back(Job(new DepthSortItems::JobModel("DepthSortOpaque", _jobs.back().getOutput())));
|
||||
_jobs.push_back(Job(new DrawOpaqueDeferred::JobModel("DrawOpaqueDeferred", _jobs.back().getOutput())));
|
||||
_jobs.push_back(Job(new DrawLight::JobModel("DrawLight")));
|
||||
_jobs.push_back(Job(new ResetGLState::JobModel()));
|
||||
_jobs.push_back(Job(new RenderDeferred::JobModel()));
|
||||
_jobs.push_back(Job(new ResolveDeferred::JobModel()));
|
||||
_jobs.push_back(Job(new FetchItems::JobModel(FetchItems(ItemFilter::Builder::transparentShape().withoutLayered()))));
|
||||
_jobs.push_back(Job(new CullItems::JobModel(_jobs.back().getOutput())));
|
||||
_jobs.push_back(Job(new DepthSortItems::JobModel(_jobs.back().getOutput())));
|
||||
_jobs.push_back(Job(new DrawTransparentDeferred::JobModel(_jobs.back().getOutput())));
|
||||
_jobs.push_back(Job(new DrawOverlay3D::JobModel()));
|
||||
_jobs.push_back(Job(new RenderDeferred::JobModel("RenderDeferred")));
|
||||
_jobs.push_back(Job(new ResolveDeferred::JobModel("ResolveDeferred")));
|
||||
_jobs.push_back(Job(new FetchItems::JobModel("FetchTransparent", FetchItems(ItemFilter::Builder::transparentShape().withoutLayered()))));
|
||||
_jobs.push_back(Job(new CullItems::JobModel("CullTransparent", _jobs.back().getOutput())));
|
||||
_jobs.push_back(Job(new DepthSortItems::JobModel("DepthSortTransparent", _jobs.back().getOutput(), DepthSortItems(false))));
|
||||
_jobs.push_back(Job(new DrawTransparentDeferred::JobModel("TransparentDeferred", _jobs.back().getOutput())));
|
||||
_jobs.push_back(Job(new DrawOverlay3D::JobModel("DrawOverlay3D")));
|
||||
_jobs.push_back(Job(new ResetGLState::JobModel()));
|
||||
}
|
||||
|
||||
|
@ -100,7 +80,6 @@ void RenderDeferredTask::run(const SceneContextPointer& sceneContext, const Rend
|
|||
};
|
||||
|
||||
void DrawOpaqueDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDsBounds& inItems) {
|
||||
PerformanceTimer perfTimer("DrawOpaqueDeferred");
|
||||
assert(renderContext->args);
|
||||
assert(renderContext->args->_viewFrustum);
|
||||
|
||||
|
@ -108,6 +87,8 @@ void DrawOpaqueDeferred::run(const SceneContextPointer& sceneContext, const Rend
|
|||
gpu::Batch batch;
|
||||
args->_batch = &batch;
|
||||
|
||||
renderContext->_numDrawnOpaqueItems = inItems.size();
|
||||
|
||||
glm::mat4 projMat;
|
||||
Transform viewMat;
|
||||
args->_viewFrustum->evalProjectionMatrix(projMat);
|
||||
|
@ -129,13 +110,14 @@ void DrawOpaqueDeferred::run(const SceneContextPointer& sceneContext, const Rend
|
|||
|
||||
renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnOpaqueItems);
|
||||
|
||||
// Before rendering the batch make sure we re in sync with gl state
|
||||
args->_context->syncCache();
|
||||
renderContext->args->_context->syncCache();
|
||||
args->_context->render((*args->_batch));
|
||||
args->_batch = nullptr;
|
||||
}
|
||||
|
||||
void DrawTransparentDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDsBounds& inItems) {
|
||||
PerformanceTimer perfTimer("DrawTransparentDeferred");
|
||||
assert(renderContext->args);
|
||||
assert(renderContext->args->_viewFrustum);
|
||||
auto& renderDetails = renderContext->args->_details;
|
||||
|
@ -144,6 +126,8 @@ void DrawTransparentDeferred::run(const SceneContextPointer& sceneContext, const
|
|||
gpu::Batch batch;
|
||||
args->_batch = &batch;
|
||||
|
||||
renderContext->_numDrawnTransparentItems = inItems.size();
|
||||
|
||||
glm::mat4 projMat;
|
||||
Transform viewMat;
|
||||
args->_viewFrustum->evalProjectionMatrix(projMat);
|
||||
|
@ -166,6 +150,8 @@ void DrawTransparentDeferred::run(const SceneContextPointer& sceneContext, const
|
|||
|
||||
renderItems(sceneContext, renderContext, inItems, renderContext->_maxDrawnTransparentItems);
|
||||
|
||||
// Before rendering the batch make sure we re in sync with gl state
|
||||
args->_context->syncCache();
|
||||
args->_context->render((*args->_batch));
|
||||
args->_batch = nullptr;
|
||||
|
||||
|
@ -189,7 +175,6 @@ const gpu::PipelinePointer& DrawOverlay3D::getOpaquePipeline() const {
|
|||
}
|
||||
|
||||
void DrawOverlay3D::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
|
||||
PerformanceTimer perfTimer("DrawOverlay3D");
|
||||
assert(renderContext->args);
|
||||
assert(renderContext->args->_viewFrustum);
|
||||
|
||||
|
|
|
@ -25,11 +25,6 @@
|
|||
using namespace render;
|
||||
|
||||
DrawSceneTask::DrawSceneTask() : Task() {
|
||||
|
||||
_jobs.push_back(Job(new Job::Model<DrawOpaque>()));
|
||||
_jobs.push_back(Job(new Job::Model<DrawLight>()));
|
||||
_jobs.push_back(Job(new Job::Model<DrawTransparent>()));
|
||||
_jobs.push_back(Job(new Job::Model<ResetGLState>()));
|
||||
}
|
||||
|
||||
DrawSceneTask::~DrawSceneTask() {
|
||||
|
@ -61,7 +56,6 @@ Job::~Job() {
|
|||
|
||||
|
||||
void render::cullItems(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDsBounds& inItems, ItemIDsBounds& outItems) {
|
||||
PerformanceTimer perfTimer("cullItems");
|
||||
assert(renderContext->args);
|
||||
assert(renderContext->args->_viewFrustum);
|
||||
|
||||
|
@ -105,8 +99,6 @@ void render::cullItems(const SceneContextPointer& sceneContext, const RenderCont
|
|||
|
||||
|
||||
void FetchItems::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, ItemIDsBounds& outItems) {
|
||||
PerformanceTimer perfTimer("FetchItems::run");
|
||||
|
||||
auto& scene = sceneContext->_scene;
|
||||
auto& items = scene->getMasterBucket().at(_filter);
|
||||
auto& renderDetails = renderContext->args->_details;
|
||||
|
@ -125,7 +117,6 @@ void FetchItems::run(const SceneContextPointer& sceneContext, const RenderContex
|
|||
}
|
||||
|
||||
void CullItems::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDsBounds& inItems, ItemIDsBounds& outItems) {
|
||||
PerformanceTimer perfTimer("CullItems::run");
|
||||
|
||||
outItems.clear();
|
||||
outItems.reserve(inItems.size());
|
||||
|
@ -156,7 +147,6 @@ struct BackToFrontSort {
|
|||
};
|
||||
|
||||
void render::depthSortItems(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, bool frontToBack, const ItemIDsBounds& inItems, ItemIDsBounds& outItems) {
|
||||
PerformanceTimer perfTimer("depthSortItems");
|
||||
assert(renderContext->args);
|
||||
assert(renderContext->args->_viewFrustum);
|
||||
|
||||
|
@ -204,7 +194,6 @@ void DepthSortItems::run(const SceneContextPointer& sceneContext, const RenderCo
|
|||
}
|
||||
|
||||
void render::renderItems(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDsBounds& inItems, int maxDrawnItems) {
|
||||
PerformanceTimer perfTimer("renderItems");
|
||||
auto& scene = sceneContext->_scene;
|
||||
RenderArgs* args = renderContext->args;
|
||||
// render
|
||||
|
@ -271,172 +260,7 @@ void ResetGLState::run(const SceneContextPointer& sceneContext, const RenderCont
|
|||
renderContext->args->_context->render(theBatch);
|
||||
}
|
||||
|
||||
template <> void render::jobRun(DrawOpaque& job, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
|
||||
PerformanceTimer perfTimer("DrawOpaque");
|
||||
assert(renderContext->args);
|
||||
assert(renderContext->args->_viewFrustum);
|
||||
|
||||
// render opaques
|
||||
auto& scene = sceneContext->_scene;
|
||||
auto& items = scene->getMasterBucket().at(ItemFilter::Builder::opaqueShape());
|
||||
auto& renderDetails = renderContext->args->_details;
|
||||
|
||||
ItemIDsBounds inItems;
|
||||
inItems.reserve(items.size());
|
||||
for (auto id : items) {
|
||||
auto item = scene->getItem(id);
|
||||
AABox bound;
|
||||
{
|
||||
PerformanceTimer perfTimer("getBound");
|
||||
bound = item.getBound();
|
||||
}
|
||||
inItems.emplace_back(ItemIDAndBounds(id, bound));
|
||||
}
|
||||
ItemIDsBounds& renderedItems = inItems;
|
||||
|
||||
renderContext->_numFeedOpaqueItems = renderedItems.size();
|
||||
|
||||
ItemIDsBounds culledItems;
|
||||
culledItems.reserve(inItems.size());
|
||||
if (renderContext->_cullOpaque) {
|
||||
renderDetails.pointTo(RenderDetails::OPAQUE_ITEM);
|
||||
cullItems(sceneContext, renderContext, renderedItems, culledItems);
|
||||
renderDetails.pointTo(RenderDetails::OTHER_ITEM);
|
||||
renderedItems = culledItems;
|
||||
}
|
||||
|
||||
renderContext->_numDrawnOpaqueItems = renderedItems.size();
|
||||
|
||||
ItemIDsBounds sortedItems;
|
||||
sortedItems.reserve(culledItems.size());
|
||||
if (renderContext->_sortOpaque) {
|
||||
depthSortItems(sceneContext, renderContext, true, renderedItems, sortedItems); // Sort Front to back opaque items!
|
||||
renderedItems = sortedItems;
|
||||
}
|
||||
|
||||
if (renderContext->_renderOpaque) {
|
||||
RenderArgs* args = renderContext->args;
|
||||
gpu::Batch batch;
|
||||
args->_batch = &batch;
|
||||
|
||||
glm::mat4 projMat;
|
||||
Transform viewMat;
|
||||
args->_viewFrustum->evalProjectionMatrix(projMat);
|
||||
args->_viewFrustum->evalViewTransform(viewMat);
|
||||
if (args->_renderMode == RenderArgs::MIRROR_RENDER_MODE) {
|
||||
viewMat.postScale(glm::vec3(-1.0f, 1.0f, 1.0f));
|
||||
}
|
||||
batch.setProjectionTransform(projMat);
|
||||
batch.setViewTransform(viewMat);
|
||||
|
||||
{
|
||||
GLenum buffers[3];
|
||||
int bufferCount = 0;
|
||||
buffers[bufferCount++] = GL_COLOR_ATTACHMENT0;
|
||||
buffers[bufferCount++] = GL_COLOR_ATTACHMENT1;
|
||||
buffers[bufferCount++] = GL_COLOR_ATTACHMENT2;
|
||||
batch._glDrawBuffers(bufferCount, buffers);
|
||||
}
|
||||
|
||||
renderItems(sceneContext, renderContext, renderedItems, renderContext->_maxDrawnOpaqueItems);
|
||||
|
||||
args->_context->render((*args->_batch));
|
||||
args->_batch = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template <> void render::jobRun(DrawTransparent& job, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
|
||||
PerformanceTimer perfTimer("DrawTransparent");
|
||||
assert(renderContext->args);
|
||||
assert(renderContext->args->_viewFrustum);
|
||||
|
||||
// render transparents
|
||||
auto& scene = sceneContext->_scene;
|
||||
auto& items = scene->getMasterBucket().at(ItemFilter::Builder::transparentShape());
|
||||
auto& renderDetails = renderContext->args->_details;
|
||||
|
||||
ItemIDsBounds inItems;
|
||||
inItems.reserve(items.size());
|
||||
for (auto id : items) {
|
||||
auto item = scene->getItem(id);
|
||||
AABox bound;
|
||||
{
|
||||
PerformanceTimer perfTimer("getBound");
|
||||
bound = item.getBound();
|
||||
}
|
||||
inItems.emplace_back(ItemIDAndBounds(id, bound));
|
||||
}
|
||||
ItemIDsBounds& renderedItems = inItems;
|
||||
|
||||
renderContext->_numFeedTransparentItems = renderedItems.size();
|
||||
|
||||
ItemIDsBounds culledItems;
|
||||
culledItems.reserve(inItems.size());
|
||||
if (renderContext->_cullTransparent) {
|
||||
renderDetails.pointTo(RenderDetails::TRANSLUCENT_ITEM);
|
||||
cullItems(sceneContext, renderContext, inItems, culledItems);
|
||||
renderDetails.pointTo(RenderDetails::OTHER_ITEM);
|
||||
renderedItems = culledItems;
|
||||
}
|
||||
|
||||
renderContext->_numDrawnTransparentItems = renderedItems.size();
|
||||
|
||||
ItemIDsBounds sortedItems;
|
||||
sortedItems.reserve(culledItems.size());
|
||||
if (renderContext->_sortTransparent) {
|
||||
depthSortItems(sceneContext, renderContext, false, renderedItems, sortedItems); // Sort Back to front transparent items!
|
||||
renderedItems = sortedItems;
|
||||
}
|
||||
|
||||
if (renderContext->_renderTransparent) {
|
||||
RenderArgs* args = renderContext->args;
|
||||
gpu::Batch batch;
|
||||
args->_batch = &batch;
|
||||
|
||||
glm::mat4 projMat;
|
||||
Transform viewMat;
|
||||
args->_viewFrustum->evalProjectionMatrix(projMat);
|
||||
args->_viewFrustum->evalViewTransform(viewMat);
|
||||
if (args->_renderMode == RenderArgs::MIRROR_RENDER_MODE) {
|
||||
viewMat.postScale(glm::vec3(-1.0f, 1.0f, 1.0f));
|
||||
}
|
||||
batch.setProjectionTransform(projMat);
|
||||
batch.setViewTransform(viewMat);
|
||||
|
||||
const float MOSTLY_OPAQUE_THRESHOLD = 0.75f;
|
||||
const float TRANSPARENT_ALPHA_THRESHOLD = 0.0f;
|
||||
|
||||
// render translucent meshes afterwards
|
||||
{
|
||||
GLenum buffers[2];
|
||||
int bufferCount = 0;
|
||||
buffers[bufferCount++] = GL_COLOR_ATTACHMENT1;
|
||||
buffers[bufferCount++] = GL_COLOR_ATTACHMENT2;
|
||||
batch._glDrawBuffers(bufferCount, buffers);
|
||||
args->_alphaThreshold = MOSTLY_OPAQUE_THRESHOLD;
|
||||
}
|
||||
|
||||
renderItems(sceneContext, renderContext, renderedItems, renderContext->_maxDrawnTransparentItems);
|
||||
|
||||
{
|
||||
GLenum buffers[3];
|
||||
int bufferCount = 0;
|
||||
buffers[bufferCount++] = GL_COLOR_ATTACHMENT0;
|
||||
batch._glDrawBuffers(bufferCount, buffers);
|
||||
args->_alphaThreshold = TRANSPARENT_ALPHA_THRESHOLD;
|
||||
}
|
||||
|
||||
|
||||
renderItems(sceneContext, renderContext, renderedItems, renderContext->_maxDrawnTransparentItems);
|
||||
|
||||
args->_context->render((*args->_batch));
|
||||
args->_batch = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void DrawLight::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
|
||||
PerformanceTimer perfTimer("DrawLight");
|
||||
assert(renderContext->args);
|
||||
assert(renderContext->args->_viewFrustum);
|
||||
|
||||
|
@ -449,12 +273,7 @@ void DrawLight::run(const SceneContextPointer& sceneContext, const RenderContext
|
|||
inItems.reserve(items.size());
|
||||
for (auto id : items) {
|
||||
auto item = scene->getItem(id);
|
||||
AABox bound;
|
||||
{
|
||||
PerformanceTimer perfTimer("getBound");
|
||||
bound = item.getBound();
|
||||
}
|
||||
inItems.emplace_back(ItemIDAndBounds(id, bound));
|
||||
inItems.emplace_back(ItemIDAndBounds(id, item.getBound()));
|
||||
}
|
||||
|
||||
ItemIDsBounds culledItems;
|
||||
|
@ -470,7 +289,6 @@ void DrawLight::run(const SceneContextPointer& sceneContext, const RenderContext
|
|||
}
|
||||
|
||||
void DrawBackground::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
|
||||
PerformanceTimer perfTimer("DrawBackground");
|
||||
assert(renderContext->args);
|
||||
assert(renderContext->args->_viewFrustum);
|
||||
|
||||
|
@ -506,61 +324,6 @@ void DrawBackground::run(const SceneContextPointer& sceneContext, const RenderCo
|
|||
args->_context->syncCache();
|
||||
}
|
||||
|
||||
void DrawPostLayered::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
|
||||
PerformanceTimer perfTimer("DrawPostLayered");
|
||||
assert(renderContext->args);
|
||||
assert(renderContext->args->_viewFrustum);
|
||||
|
||||
// render backgrounds
|
||||
auto& scene = sceneContext->_scene;
|
||||
auto& items = scene->getMasterBucket().at(ItemFilter::Builder::opaqueShape().withLayered());
|
||||
|
||||
|
||||
ItemIDsBounds inItems;
|
||||
inItems.reserve(items.size());
|
||||
for (auto id : items) {
|
||||
auto& item = scene->getItem(id);
|
||||
if (item.getKey().isVisible() && (item.getLayer() > 0)) {
|
||||
auto item = scene->getItem(id);
|
||||
AABox bound;
|
||||
{
|
||||
PerformanceTimer perfTimer("getBound");
|
||||
bound = item.getBound();
|
||||
}
|
||||
inItems.emplace_back(ItemIDAndBounds(id, bound));
|
||||
}
|
||||
}
|
||||
if (inItems.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
RenderArgs* args = renderContext->args;
|
||||
gpu::Batch batch;
|
||||
args->_batch = &batch;
|
||||
|
||||
glm::mat4 projMat;
|
||||
Transform viewMat;
|
||||
args->_viewFrustum->evalProjectionMatrix(projMat);
|
||||
args->_viewFrustum->evalViewTransform(viewMat);
|
||||
if (args->_renderMode == RenderArgs::MIRROR_RENDER_MODE) {
|
||||
viewMat.postScale(glm::vec3(-1.0f, 1.0f, 1.0f));
|
||||
}
|
||||
batch.setProjectionTransform(projMat);
|
||||
batch.setViewTransform(viewMat);
|
||||
|
||||
batch.clearFramebuffer(gpu::Framebuffer::BUFFER_DEPTH, glm::vec4(), 1.f, 0);
|
||||
|
||||
renderItems(sceneContext, renderContext, inItems);
|
||||
|
||||
// Force the context sync
|
||||
args->_context->syncCache();
|
||||
|
||||
args->_context->render((*args->_batch));
|
||||
args->_batch = nullptr;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void ItemMaterialBucketMap::insert(const ItemID& id, const model::MaterialKey& key) {
|
||||
// Insert the itemID in every bucket where it filters true
|
||||
for (auto& bucket : (*this)) {
|
||||
|
|
|
@ -13,6 +13,9 @@
|
|||
#define hifi_render_Task_h
|
||||
|
||||
#include "Engine.h"
|
||||
#include "gpu/Batch.h"
|
||||
#include <PerfStat.h>
|
||||
|
||||
|
||||
namespace render {
|
||||
|
||||
|
@ -79,9 +82,9 @@ public:
|
|||
const Varying getOutput() const { return _concept->getOutput(); }
|
||||
|
||||
void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
|
||||
if (_concept) {
|
||||
_concept->run(sceneContext, renderContext);
|
||||
}
|
||||
PerformanceTimer perfTimer(getName().c_str());
|
||||
PROFILE_RANGE(getName().c_str());
|
||||
_concept->run(sceneContext, renderContext);
|
||||
}
|
||||
|
||||
protected:
|
||||
|
@ -129,9 +132,8 @@ public:
|
|||
|
||||
const Varying getInput() const { return _input; }
|
||||
|
||||
ModelI(const Varying& input): _input(input) {}
|
||||
ModelI(const Varying& input, const std::string& name): Concept(name), _input(input) {}
|
||||
ModelI(Data data): _data(data) {}
|
||||
ModelI(const std::string& name, const Varying& input): Concept(name), _input(input) {}
|
||||
ModelI(const std::string& name, Data data): Concept(name), _data(data) {}
|
||||
|
||||
void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { jobRunI(_data, sceneContext, renderContext, _input.get<I>()); }
|
||||
};
|
||||
|
@ -146,11 +148,11 @@ public:
|
|||
|
||||
const Varying getOutput() const { return _output; }
|
||||
|
||||
ModelO() : _output(Output()) {
|
||||
ModelO(const std::string& name): Concept(name), _output(Output()) {
|
||||
|
||||
}
|
||||
|
||||
ModelO(Data data): _data(data), _output(Output()) {}
|
||||
ModelO(const std::string& name, Data data): Concept(name), _data(data), _output(Output()) {}
|
||||
|
||||
void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
|
||||
jobRunO(_data, sceneContext, renderContext, _output.edit<O>());
|
||||
|
@ -170,8 +172,8 @@ public:
|
|||
const Varying getInput() const { return _input; }
|
||||
const Varying getOutput() const { return _output; }
|
||||
|
||||
ModelIO(const Varying& input): _input(input), _output(Output()) {}
|
||||
ModelIO(Data data, Output output): _data(data), _output(output) {}
|
||||
ModelIO(const std::string& name, const Varying& input, Data data = Data()): Concept(name), _data(data), _input(input), _output(Output()) {}
|
||||
ModelIO(const std::string& name, Data data, Output output): Concept(name), _data(data), _output(output) {}
|
||||
|
||||
void setInput(const Varying& input) { _input = input; }
|
||||
|
||||
|
@ -215,24 +217,13 @@ class DepthSortItems {
|
|||
public:
|
||||
bool _frontToBack = true;
|
||||
|
||||
DepthSortItems(bool frontToBack = true) : _frontToBack(frontToBack) {}
|
||||
|
||||
void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDsBounds& inItems, ItemIDsBounds& outITems);
|
||||
|
||||
typedef Job::ModelIO<DepthSortItems, ItemIDsBounds, ItemIDsBounds> JobModel;
|
||||
};
|
||||
|
||||
|
||||
|
||||
class DrawOpaque {
|
||||
public:
|
||||
};
|
||||
template <> void jobRun(DrawOpaque& job, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext);
|
||||
|
||||
|
||||
class DrawTransparent {
|
||||
public:
|
||||
};
|
||||
template <> void jobRun(DrawTransparent& job, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext);
|
||||
|
||||
class DrawLight {
|
||||
public:
|
||||
void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext);
|
||||
|
@ -247,14 +238,6 @@ public:
|
|||
typedef Job::Model<DrawBackground> JobModel;
|
||||
};
|
||||
|
||||
|
||||
class DrawPostLayered {
|
||||
public:
|
||||
void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext);
|
||||
|
||||
typedef Job::Model<DrawPostLayered> JobModel;
|
||||
};
|
||||
|
||||
class ResetGLState {
|
||||
public:
|
||||
void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext);
|
||||
|
|
Loading…
Reference in a new issue