Compare commits

...

4 Commits

4 changed files with 32 additions and 6 deletions

View File

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.13)
project(blah)
#set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_BUILD_TYPE Debug)
include_directories("${PROJECT_SOURCE_DIR}/src/")
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD 11)

View File

@ -2,9 +2,11 @@
#define _SHADERLOADER_H_
#include <fstream>
#include <libgen.h>
#include <stdio.h>
#include <stdlib.h>
#include <sstream>
#include <unistd.h>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
@ -37,7 +39,8 @@ struct ShaderRegistry {
void register_shader(struct ShaderRegistry *r, char *name, int type, GLuint id) {
// Allocate storage for the name
int name_size = strlen(name);
char *n = (char*) malloc(name_size * sizeof(char));
char *n = (char*) calloc(name_size, sizeof(char));
strncpy(n, name, strlen(name));
// Grow and copy
int new_size = r->size + 1;
@ -149,6 +152,9 @@ int loadShadersFromFile(const char* file_path, struct ShaderRegistry *registry)
char *name;
char *type;
char *path;
char *file_path_copy = (char*) calloc(strlen(file_path), sizeof(char));
strncpy(file_path_copy, file_path, strlen(file_path));
char *base = dirname((char*) file_path_copy);
while((size = getline(&line, &size, fp)) != -1) {
if(size == 0) {
// Skipping, line length 0
@ -168,10 +174,21 @@ int loadShadersFromFile(const char* file_path, struct ShaderRegistry *registry)
// Invalid line, not enough elements.
// @TODO Inform the user.
free(line_copy);
name = type = path = NULL;
name = type = path = NULL;
continue;
}
// Strip trailing new lines from the path.
path[strcspn(path, "\n")] = 0;
// Convert any paths as relative to the basename of the file_path they
// were loaded from.
int real_path_size = strlen(base) + 1 + strlen(path) + 1;
char *shader_path = (char*) calloc(real_path_size, sizeof(char));
strncat(shader_path, base, strlen(base));
strcat(shader_path + strlen(base), "/");
strncat(shader_path + strlen(base) + 1, path, strlen(path));
// Validate type
enum ShaderType shader_type;
if(strcmp("fragment", type) == 0) {
@ -188,18 +205,27 @@ int loadShadersFromFile(const char* file_path, struct ShaderRegistry *registry)
// Invalid line, unknown type.
// @TODO Inform the user.
free(line_copy);
free(shader_path);
name = type = path = NULL;
continue;
}
GLuint shader_id = compile_shader(path, shader_type);
GLuint shader_id = compile_shader(shader_path, shader_type);
if(shader_id == 0) {
// Error in compilation of the shader
// @TODO Inform the user.
free(line_copy);
free(shader_path);
name = type = path = NULL;
continue;
}
// Add to registry
register_shader(registry, name, shader_type, shader_id);
// Cleanup
free(line_copy);
free(shader_path);
}
return 0;
}

View File

@ -1,4 +1,4 @@
#version 330 core
#version 300 es
layout(location = 0) in vec3 vertexPosition_modelspace;
void main(){
gl_Position.xyz = vertexPosition_modelspace;

View File

@ -1,4 +1,4 @@
#version 330 core
#version 300 es
out vec3 color;
void main(){
color = vec3(1,0,0);