Framebuffer done.

This commit is contained in:
2025-08-15 18:50:43 -05:00
parent cbdc271a5e
commit d1ab8b0cc8
9 changed files with 133 additions and 36 deletions

View File

@@ -0,0 +1,57 @@
/**
* Copyright (c) 2025 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#include "framebuffer.h"
#include "assert/assert.h"
#include "util/memory.h"
void frameBufferInit(
framebuffer_t *framebuffer,
const uint32_t width,
const uint32_t height
) {
assertNotNull(framebuffer, "Framebuffer cannot be NULL");
assertTrue(width > 0 && height > 0, "Width & height must be greater than 0");
memoryZero(framebuffer, sizeof(framebuffer_t));
textureInit(&framebuffer->texture, width, height, NULL);
// Generate the framebuffer object
glGenFramebuffers(1, &framebuffer->id);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer->id);
// Attach the texture to the framebuffer
glFramebufferTexture2D(
GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, framebuffer->texture.id, 0
);
// Check if the framebuffer is complete
if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
assertUnreachable("Framebuffer is not complete");
}
// Unbind the framebuffer
glBindFramebuffer(GL_FRAMEBUFFER, 0);
}
void frameBufferBind(const framebuffer_t *framebuffer) {
if(framebuffer == NULL) {
glBindFramebuffer(GL_FRAMEBUFFER, 0);
return;
}
// Bind the framebuffer for rendering
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer->id);
}
void frameBufferDispose(framebuffer_t *framebuffer) {
assertNotNull(framebuffer, "Framebuffer cannot be NULL");
glDeleteFramebuffers(1, &framebuffer->id);
textureDispose(&framebuffer->texture);
}