Files
inferno-hart/src/renderer/renderer.cpp
Ben Kyd f13a25978c merge
2022-11-22 11:27:45 +00:00

70 lines
1.8 KiB
C++

#include "renderer.hpp"
#include <scene/camera.hpp>
#include <scene/scene.hpp>
using namespace inferno;
RayRenderer::RayRenderer()
{
mTarget = new glm::fvec4[mRenderTargetSize.x * mRenderTargetSize.y];
glGenTextures(1, &mRenderTargetTexture);
glBindTexture(GL_TEXTURE_2D, mRenderTargetTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, mRenderTargetSize.x, mRenderTargetSize.y, 0, GL_RGBA, GL_FLOAT, mTarget);
glBindTexture(GL_TEXTURE_2D, 0);
}
RayRenderer::~RayRenderer()
{
delete[] mTarget;
}
void RayRenderer::setScene(Scene* scene)
{
mCurrentScene = scene;
}
void RayRenderer::setTargetSize(glm::ivec2 size)
{
mRenderTargetSize = size;
}
glm::ivec2 RayRenderer::getTargetSize()
{
return mRenderTargetSize;
}
GLuint RayRenderer::getRenderedTexture()
{
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glBindTexture(GL_TEXTURE_2D, mRenderTargetTexture);
return mRenderTargetTexture;
}
void RayRenderer::prepare()
{
}
void RayRenderer::draw()
{
for (int x = 0; x < mRenderTargetSize.x; x++)
for (int y = 0; y < mRenderTargetSize.y; y++)
{
mTarget[y * mRenderTargetSize.x + x] = { 0.0f + ((float)x / (float)mRenderTargetSize.x), 0.0f + ((float)y / (float)mRenderTargetSize.y), 1.0f, 1.0f };
}
glBindTexture(GL_TEXTURE_2D, mRenderTargetTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, mRenderTargetSize.x, mRenderTargetSize.y, 0, GL_RGBA, GL_FLOAT, mTarget);
glBindTexture(GL_TEXTURE_2D, 0);
}