Moved shader to arena system
This commit is contained in:
parent
8fe8fbb493
commit
84d96acdd3
3 changed files with 23 additions and 13 deletions
|
|
@ -68,8 +68,8 @@ int main(int argc, char *argv[]) {
|
|||
.vertex_shader_source_path = "shaders/vert.glsl",
|
||||
.fragment_shader_source_path = "shaders/frag.glsl"};
|
||||
|
||||
wn_shader shader = wn_shader_init(shader_code_location);
|
||||
if (shader.success == false) {
|
||||
wn_shader *shader = wn_shader_init(global_arena, shader_code_location);
|
||||
if (shader->success == false) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize shader");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
|
@ -144,7 +144,7 @@ int main(int argc, char *argv[]) {
|
|||
mat4 mvp;
|
||||
camera_calc_mvp(&mvp, &camera);
|
||||
int mvp_uniform_location =
|
||||
glGetUniformLocation(shader.shaderProgram, "MVP");
|
||||
glGetUniformLocation(shader->shaderProgram, "MVP");
|
||||
glUniformMatrix4fv(mvp_uniform_location, 1, GL_FALSE, &mvp[0][0]);
|
||||
|
||||
// render
|
||||
|
|
@ -152,7 +152,7 @@ int main(int argc, char *argv[]) {
|
|||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
// draw our first triangle
|
||||
glUseProgram(shader.shaderProgram);
|
||||
glUseProgram(shader->shaderProgram);
|
||||
glBindVertexArray(
|
||||
VAO); // seeing as we only have a single VAO there's no need to bind it
|
||||
// every time, but we'll do so to keep things a bit more organized
|
||||
|
|
@ -167,7 +167,6 @@ int main(int argc, char *argv[]) {
|
|||
glDeleteBuffers(1, &VBO);
|
||||
glDeleteBuffers(1, &EBO);
|
||||
|
||||
wn_shader_deinit(shader);
|
||||
arena_deinit(global_arena);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
|
|
|||
21
src/shader.c
21
src/shader.c
|
|
@ -1,10 +1,14 @@
|
|||
#include "shader.h"
|
||||
#include "SDL3/SDL_iostream.h"
|
||||
#include "SDL3/SDL_log.h"
|
||||
#include "arena_allocator.h"
|
||||
#include <GLES2/gl2.h>
|
||||
|
||||
wn_shader wn_shader_init(wn_shader_code_location shader_code_location) {
|
||||
wn_shader shader = {.shaderProgram = 0, .success = false};
|
||||
wn_shader *wn_shader_init(Arena *arena,
|
||||
wn_shader_code_location shader_code_location) {
|
||||
|
||||
wn_shader *shader = arena_alloc(arena, sizeof(wn_shader));
|
||||
*shader = (wn_shader){.shaderProgram = 0, .success = false};
|
||||
|
||||
const char *vertexShaderSource =
|
||||
SDL_LoadFile(shader_code_location.vertex_shader_source_path, NULL);
|
||||
|
|
@ -60,11 +64,16 @@ wn_shader wn_shader_init(wn_shader_code_location shader_code_location) {
|
|||
glDeleteShader(vertexShader);
|
||||
glDeleteShader(fragmentShader);
|
||||
|
||||
shader.shaderProgram = shaderProgram;
|
||||
shader.success = true;
|
||||
shader->shaderProgram = shaderProgram;
|
||||
shader->success = true;
|
||||
|
||||
arena_deinit_task_push(arena, (ArenaDeinitTask){.func_ptr = *wn_shader_deinit,
|
||||
.func_param = shader,
|
||||
.next = NULL});
|
||||
return shader;
|
||||
}
|
||||
|
||||
void wn_shader_deinit(wn_shader shader) {
|
||||
glDeleteProgram(shader.shaderProgram);
|
||||
void wn_shader_deinit(void *shader) {
|
||||
wn_shader *cast_shader = (wn_shader *)shader;
|
||||
glDeleteProgram(cast_shader->shaderProgram);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
#include "arena_allocator.h"
|
||||
#include <stdbool.h>
|
||||
|
||||
typedef struct {
|
||||
|
|
@ -13,6 +14,7 @@ struct wn_shader_s {
|
|||
};
|
||||
typedef struct wn_shader_s wn_shader;
|
||||
|
||||
wn_shader wn_shader_init(wn_shader_code_location shader_code_location);
|
||||
wn_shader *wn_shader_init(Arena *arena,
|
||||
wn_shader_code_location shader_code_location);
|
||||
|
||||
void wn_shader_deinit(wn_shader shader);
|
||||
void wn_shader_deinit(void* shader);
|
||||
|
|
|
|||
Loading…
Reference in a new issue