2015-11-02 19:14:35 +00:00
|
|
|
#include "OverlayRasterizer.h"
|
|
|
|
|
2015-12-08 23:40:47 +00:00
|
|
|
#include <cmath>
|
2015-11-02 19:14:35 +00:00
|
|
|
#include "Color.h"
|
2016-01-26 01:26:43 +00:00
|
|
|
#include "SoftwareCanvasRenderer.h"
|
2015-11-02 19:14:35 +00:00
|
|
|
#include "CameraDefinition.h"
|
|
|
|
#include "CanvasFragment.h"
|
|
|
|
|
2016-01-26 01:26:43 +00:00
|
|
|
OverlayRasterizer::OverlayRasterizer(SoftwareCanvasRenderer *renderer)
|
|
|
|
: Rasterizer(renderer, renderer->getProgressHelper(), 0, COLOR_WHITE) {
|
2015-11-02 19:14:35 +00:00
|
|
|
}
|
|
|
|
|
2015-11-09 21:38:00 +00:00
|
|
|
int OverlayRasterizer::prepareRasterization() {
|
2015-11-09 23:34:19 +00:00
|
|
|
setPerspectiveCorrection(false);
|
2015-11-02 19:14:35 +00:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2015-11-09 21:38:00 +00:00
|
|
|
void OverlayRasterizer::rasterizeToCanvas(CanvasPortion *canvas) {
|
2015-12-17 00:13:20 +00:00
|
|
|
double width = to_double(renderer->render_camera->getWidth());
|
|
|
|
double height = to_double(renderer->render_camera->getHeight());
|
2015-12-17 18:29:04 +00:00
|
|
|
Vector3 topleft = renderer->unprojectPoint(Vector3(0.0, height, 1.0001));
|
|
|
|
Vector3 bottomleft = renderer->unprojectPoint(Vector3(0.0, 0.0, 1.0001));
|
|
|
|
Vector3 topright = renderer->unprojectPoint(Vector3(width, height, 1.0001));
|
|
|
|
Vector3 bottomright = renderer->unprojectPoint(Vector3(width, 0.0, 1.0001));
|
2015-11-02 19:14:35 +00:00
|
|
|
|
|
|
|
pushQuad(canvas, topleft, bottomleft, bottomright, topright);
|
|
|
|
}
|
|
|
|
|
2015-11-09 21:38:00 +00:00
|
|
|
Color OverlayRasterizer::shadeFragment(const CanvasFragment &fragment, const CanvasFragment *) const {
|
2015-12-17 00:13:20 +00:00
|
|
|
double width = to_double(renderer->render_camera->getWidth() - 1.0);
|
|
|
|
double height = to_double(renderer->render_camera->getHeight() - 1.0);
|
2015-11-02 19:14:35 +00:00
|
|
|
double relx;
|
|
|
|
double rely;
|
|
|
|
double x = floor(fragment.getPixel().x);
|
|
|
|
double y = floor(fragment.getPixel().y);
|
|
|
|
|
2015-11-09 21:38:00 +00:00
|
|
|
if (width > height) {
|
2015-11-02 19:14:35 +00:00
|
|
|
relx = 2.0 * ((x - (width - height) * 0.5) / height - 0.5);
|
|
|
|
rely = 2.0 * (y / height - 0.5);
|
2015-11-09 21:38:00 +00:00
|
|
|
} else {
|
2015-11-02 19:14:35 +00:00
|
|
|
relx = 2.0 * (x / height - 0.5);
|
|
|
|
rely = 2.0 * ((y - (height - width) * 0.5) / height - 0.5);
|
|
|
|
}
|
|
|
|
|
2015-12-17 00:13:20 +00:00
|
|
|
return processPixel(trunc_to_int(x), trunc_to_int(y), relx, rely);
|
2015-11-02 19:14:35 +00:00
|
|
|
}
|