added render pipeline WIP
This commit is contained in:
@@ -2,38 +2,88 @@
|
||||
#include "BehaviourScripts/Camera.hpp"
|
||||
#include <algorithm>
|
||||
#include "Debug.hpp"
|
||||
#include "RenderPipeline.hpp"
|
||||
|
||||
void TSE::Scene::Render(IRenderer &rnd, const IWindow &wnd)
|
||||
{
|
||||
RenderPipeline* pipeline = IRenderer::pipeline;
|
||||
auto camerasBackup = std::vector<Camera*>(IRenderer::camerasToRenderWith);
|
||||
int counter = 1;
|
||||
for(auto l : layers)
|
||||
|
||||
if(pipeline != nullptr)
|
||||
{
|
||||
IRenderer::camerasToRenderWith.clear();
|
||||
if(!l.second->IsVisual()) continue;
|
||||
for(auto camera : camerasBackup)
|
||||
for(int i = 0; i < pipeline->GetRenderStepCount(); i++)
|
||||
{
|
||||
auto it = std::find(camera->layersNotToRender.begin(), camera->layersNotToRender.end(), l.second->GetID());
|
||||
if(it == camera->layersNotToRender.end())
|
||||
IRenderer::camerasToRenderWith = std::vector<Camera*>(camerasBackup);
|
||||
const RenderStep& step = pipeline->GetRenderStepAt(i);
|
||||
if(!step.EditorCamera)
|
||||
{
|
||||
IRenderer::camerasToRenderWith.push_back(camera);
|
||||
|
||||
for(int i = 0; i < IRenderer::camerasToRenderWith.size(); i++)
|
||||
{
|
||||
if(IRenderer::camerasToRenderWith[i]->baseObject->name == ".EditorCamera")
|
||||
IRenderer::camerasToRenderWith.erase(IRenderer::camerasToRenderWith.begin() + i);
|
||||
}
|
||||
}
|
||||
for(int i = 0; i < IRenderer::camerasToRenderWith.size(); i++)
|
||||
{
|
||||
if(IRenderer::camerasToRenderWith[i]->baseObject->name != ".EditorCamera")
|
||||
IRenderer::camerasToRenderWith[i]->SetRenderTarget(step.target);
|
||||
}
|
||||
|
||||
int counter = 1;
|
||||
|
||||
for(auto l : step.layersToRender)
|
||||
{
|
||||
if(!l->IsVisual()) continue;
|
||||
l->Render(rnd);
|
||||
if(counter++ != layers.size())
|
||||
{
|
||||
rnd.End(); //OPTIMIZE:
|
||||
//takes up 13,97% of function, but only needed, if there is more then one layer
|
||||
//possible optimizations:
|
||||
// -remove layers
|
||||
// -make layer calculations, in shader
|
||||
// -make an offset, that is calculated on cpu, and then commit everything at once
|
||||
|
||||
// now it is better because it is only done once per frame if only one shader is used, or textures are full, or more then one layers are used
|
||||
rnd.Flush();
|
||||
rnd.Begin();
|
||||
wnd.ClearDepthBuffer();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
l.second->Render(rnd);
|
||||
if(counter++ != layers.size())
|
||||
}
|
||||
else
|
||||
{
|
||||
int counter = 1;
|
||||
for(auto l : layers)
|
||||
{
|
||||
rnd.End(); //OPTIMIZE:
|
||||
//takes up 13,97% of function, but only needed, if there is more then one layer
|
||||
//possible optimizations:
|
||||
// -remove layers
|
||||
// -make layer calculations, in shader
|
||||
// -make an offset, that is calculated on cpu, and then commit everything at once
|
||||
IRenderer::camerasToRenderWith.clear();
|
||||
if(!l.second->IsVisual()) continue;
|
||||
for(auto camera : camerasBackup)
|
||||
{
|
||||
auto it = std::find(camera->layersNotToRender.begin(), camera->layersNotToRender.end(), l.second->GetID());
|
||||
if(it == camera->layersNotToRender.end())
|
||||
{
|
||||
IRenderer::camerasToRenderWith.push_back(camera);
|
||||
}
|
||||
}
|
||||
|
||||
// now it is better because it is only done once per frame if only one shader is used, or textures are full, or more then one layers are used
|
||||
rnd.Flush();
|
||||
rnd.Begin();
|
||||
wnd.ClearDepthBuffer();
|
||||
l.second->Render(rnd);
|
||||
if(counter++ != layers.size())
|
||||
{
|
||||
rnd.End(); //OPTIMIZE:
|
||||
//takes up 13,97% of function, but only needed, if there is more then one layer
|
||||
//possible optimizations:
|
||||
// -remove layers
|
||||
// -make layer calculations, in shader
|
||||
// -make an offset, that is calculated on cpu, and then commit everything at once
|
||||
|
||||
// now it is better because it is only done once per frame if only one shader is used, or textures are full, or more then one layers are used
|
||||
rnd.Flush();
|
||||
rnd.Begin();
|
||||
wnd.ClearDepthBuffer();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user