#include "renderer.hpp" #include #include 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); }