paysages3d/src/render/software/SoftwareCanvasRenderer.cpp

68 lines
1.4 KiB
C++
Raw Normal View History

#include "SoftwareCanvasRenderer.h"
#include "Rasterizer.h"
#include "SoftwareRenderer.h"
#include "Canvas.h"
2014-06-12 15:45:59 +00:00
#include "TerrainRasterizer.h"
#include "WaterRasterizer.h"
#include "SkyRasterizer.h"
#include "CameraDefinition.h"
SoftwareCanvasRenderer::SoftwareCanvasRenderer()
{
started = false;
canvas = new Canvas();
2014-06-12 15:45:59 +00:00
rasterizers.push_back(new TerrainRasterizer(this, 0));
rasterizers.push_back(new WaterRasterizer(this, 1));
rasterizers.push_back(new SkyRasterizer(this, 2));
}
SoftwareCanvasRenderer::~SoftwareCanvasRenderer()
{
delete canvas;
2014-06-12 15:45:59 +00:00
for (auto &rasterizer: rasterizers)
{
delete rasterizer;
}
}
void SoftwareCanvasRenderer::setSize(int width, int height, int samples)
{
if (not started)
{
canvas->setSize(width * samples, height * samples);
}
}
void SoftwareCanvasRenderer::render()
{
// TEMP
started = true;
CanvasPortion *portion = canvas->at(0, 0);
2014-06-12 15:45:59 +00:00
render_camera->setRenderSize(canvas->getWidth(), canvas->getHeight());
rasterize(portion, true);
postProcess(portion, true);
}
2014-06-12 15:45:59 +00:00
const std::vector<Rasterizer *> &SoftwareCanvasRenderer::getRasterizers() const
{
2014-06-12 15:45:59 +00:00
return rasterizers;
}
2014-06-12 15:45:59 +00:00
void SoftwareCanvasRenderer::rasterize(CanvasPortion *portion, bool threaded)
{
for (auto &rasterizer:getRasterizers())
{
2014-06-12 15:45:59 +00:00
rasterizer->rasterizeToCanvas(portion);
}
}
void SoftwareCanvasRenderer::postProcess(CanvasPortion *portion, bool threaded)
{
// TODO
}