Cleaned up some of the bugs in the shader loading.
This commit is contained in:
parent
08b4825cd2
commit
1a96538a0e
3 changed files with 28 additions and 16 deletions
|
@ -5,43 +5,51 @@
|
|||
#include <cassert>
|
||||
#include <stdlib.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <glad/glad.h>
|
||||
|
||||
#define CONST_READSHADER_MAX_FN_LEN 256
|
||||
#define CONST_READSHADER_MAX_FN_SIZE 32*1024
|
||||
char *readshader(const char *fn) {
|
||||
int readshader(const char *fn, GLchar** pshdr_source) {
|
||||
char shader_fn[CONST_READSHADER_MAX_FN_LEN];
|
||||
assert(strlen(fn) + 9 < CONST_READSHADER_MAX_FN_LEN);
|
||||
struct stat status_buffer;
|
||||
|
||||
snprintf(shader_fn, CONST_READSHADER_MAX_FN_LEN, "shaders/%s", fn);
|
||||
GLchar *shdr_source;
|
||||
|
||||
snprintf(shader_fn, CONST_READSHADER_MAX_FN_LEN, "res/shaders/%s", fn);
|
||||
|
||||
printf("%s\n", shader_fn);
|
||||
|
||||
if (stat(shader_fn, &status_buffer) == -1) {
|
||||
printf("Failed to stat file '%s'\n", shader_fn);
|
||||
return NULL;
|
||||
return 0;
|
||||
}
|
||||
assert(status_buffer.st_size < CONST_READSHADER_MAX_FN_SIZE-1);
|
||||
|
||||
FILE *fh = fopen(shader_fn, "r");
|
||||
assert(fh != NULL);
|
||||
|
||||
char *shader_data = (char *)malloc(CONST_READSHADER_MAX_FN_SIZE);
|
||||
assert(shader_data != NULL);
|
||||
shdr_source = (GLchar *)malloc(CONST_READSHADER_MAX_FN_SIZE);
|
||||
assert(shdr_source != NULL);
|
||||
|
||||
size_t read_bytes = fread((void *)shader_data, sizeof(char),
|
||||
size_t read_bytes = fread((void *)shdr_source, sizeof(char),
|
||||
CONST_READSHADER_MAX_FN_SIZE-1, fh);
|
||||
assert(read_bytes < CONST_READSHADER_MAX_FN_SIZE-1);
|
||||
shader_data[read_bytes] = '\0';
|
||||
shdr_source[read_bytes] = '\0';
|
||||
|
||||
puts(shdr_source);
|
||||
|
||||
fclose(fh);
|
||||
assert(shdr_source != NULL);
|
||||
|
||||
return shader_data;
|
||||
|
||||
*pshdr_source = shdr_source;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void freeshader(void *shader_fh) {
|
||||
assert(shader_fh != NULL);
|
||||
free(shader_fh);
|
||||
void freeshader(void *pshdr_source) {
|
||||
assert(pshdr_source != NULL);
|
||||
free(pshdr_source);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue