ani is our lord and saviour)

This commit is contained in:
Ben Kyd
2022-11-07 15:14:42 +00:00
parent dfbc95ed25
commit 0c4bfe8d43
7 changed files with 34 additions and 10 deletions

View File

@@ -14,7 +14,7 @@ struct Vert
{
glm::vec3 Position;
glm::vec3 Normal;
// glm::vec2 UV;
glm::vec2 UV;
};
class Mesh

View File

@@ -3,6 +3,7 @@
layout (location = 0) in vec3 position;
layout (location = 1) in vec3 normal;
layout (location = 2) in vec2 uv;
uniform mat4 model;
uniform mat4 view;
@@ -42,5 +43,5 @@ void main() {
vec3 result = (ambient + diffuse) * objectColour;
outColour = vec4(result, 1.0);
outColour = vec4((vNormal + 1.0) /2.0, 1.0);
}

View File

@@ -132,6 +132,7 @@ int Inferno::run()
ImGui::Image((ImTextureID)mRasterRenderer->getRenderedTexture(),
{ mRasterRenderer->getTargetSize().x, mRasterRenderer->getTargetSize().y },
ImVec2(0,1), ImVec2(1,0));
glBindFramebuffer(GL_FRAMEBUFFER, 0);
ImGui::End();

View File

@@ -16,17 +16,26 @@ RasterizeRenderer::RasterizeRenderer()
glGenFramebuffers(1, &mRenderTarget);
glBindFramebuffer(GL_FRAMEBUFFER, mRenderTarget);
glGenTextures(1, &mRenderTargetTexture);
glBindTexture(GL_TEXTURE_2D, mRenderTargetTexture);
glEnable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 800, 600, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glGenTextures(1, &mRenderTargetDepthTexture );
glBindTexture(GL_TEXTURE_2D, mRenderTargetDepthTexture );
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, 800, 600, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
// Attach the texture to the framebuffer.
glFramebufferTexture2D( GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, mRenderTargetDepthTexture, 0 );
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, mRenderTargetTexture, 0);
assert(glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE);
@@ -46,15 +55,21 @@ void RasterizeRenderer::setScene(Scene* scene)
void RasterizeRenderer::setTargetSize(glm::vec2 size)
{
glBindFramebuffer(GL_FRAMEBUFFER, mRenderTarget);
glBindTexture(GL_TEXTURE_2D, mRenderTargetTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, size.x, size.y, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
glBindTexture(GL_TEXTURE_2D, mRenderTargetDepthTexture);
glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, size.x, size.y, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL );
glBindFramebuffer(GL_FRAMEBUFFER, 0);
mRenderTargetSize = size;
}
GLuint RasterizeRenderer::getRenderedTexture()
{
return mRenderTarget;
glBindFramebuffer(GL_FRAMEBUFFER, mRenderTarget);
return mRenderTargetTexture;
}
glm::vec2 RasterizeRenderer::getTargetSize()
@@ -75,6 +90,11 @@ void RasterizeRenderer::draw()
glBindFramebuffer(GL_FRAMEBUFFER, mRenderTarget);
glViewport(0, 0, mRenderTargetSize.x, mRenderTargetSize.y);
glEnable(GL_DEPTH_TEST);
// glDepthFunc(GL_GREATER);
// glDisable(GL_CULL_FACE);
for (Mesh* m : mCurrentScene->getRenderables())
{
m->getMaterial()->getGlShader()->use();

View File

@@ -24,6 +24,7 @@ public:
private:
GLuint mRenderTarget = 0;
GLuint mRenderTargetTexture = 0;
GLuint mRenderTargetDepthTexture = 0;
glm::vec2 mRenderTargetSize = {1920, 1080};
Scene* mCurrentScene;

View File

@@ -37,6 +37,7 @@ void Mesh::loadOBJ(std::filesystem::path file)
mObjLoader->getNormals()[i+1],
mObjLoader->getNormals()[i+2],
};
mVerticies.push_back(vert);
}
}
@@ -64,6 +65,9 @@ void Mesh::ready()
// vertex normals
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vert), (void*)offsetof(Vert, Normal));
// vertex UV
glEnableVertexAttribArray(2);
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(Vert), (void*)offsetof(Vert, UV));
glBindVertexArray(0);

View File

@@ -140,9 +140,6 @@ void Window::setupGLFW(std::string title)
glfwMakeContextCurrent(window);
gladLoadGLLoader((GLADloadproc)glfwGetProcAddress);
glfwSwapInterval(1); // Enable vsync
glEnable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);
}
void Window::setupImGui()