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
|
@ -44,12 +44,14 @@ int main(void) {
|
||||||
char infoLog[512];
|
char infoLog[512];
|
||||||
|
|
||||||
// Create the vertex shader
|
// Create the vertex shader
|
||||||
char *shdr_src_vertex = readshader("vertex.glsl");
|
GLchar *shdr_src_vertex;
|
||||||
|
readshader("vertex.glsl", &shdr_src_vertex);
|
||||||
u32 vertexShader = glCreateShader(GL_VERTEX_SHADER);
|
u32 vertexShader = glCreateShader(GL_VERTEX_SHADER);
|
||||||
glShaderSource(vertexShader, 1, &shdr_src_vertex, NULL);
|
glShaderSource(vertexShader, 1, &shdr_src_vertex, NULL);
|
||||||
glCompileShader(vertexShader);
|
glCompileShader(vertexShader);
|
||||||
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
|
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
|
||||||
freeshader(shdr_src_vertex);
|
freeshader(shdr_src_vertex);
|
||||||
|
|
||||||
if (!success) {
|
if (!success) {
|
||||||
glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
|
glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
|
||||||
std::cout << "ERROR SHADER::VERTEX::Compilation Failed\n" <<
|
std::cout << "ERROR SHADER::VERTEX::Compilation Failed\n" <<
|
||||||
|
@ -58,7 +60,8 @@ int main(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the fragment shader
|
// Create the fragment shader
|
||||||
char *shdr_src_fragment = readshader("fragment.glsl");
|
GLchar *shdr_src_fragment;
|
||||||
|
readshader("fragment.glsl", &shdr_src_fragment);
|
||||||
u32 fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
|
u32 fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
|
||||||
glShaderSource(fragmentShader, 1, &shdr_src_fragment, NULL);
|
glShaderSource(fragmentShader, 1, &shdr_src_fragment, NULL);
|
||||||
glCompileShader(fragmentShader);
|
glCompileShader(fragmentShader);
|
||||||
|
|
|
@ -5,43 +5,51 @@
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#include <glad/glad.h>
|
||||||
|
|
||||||
#define CONST_READSHADER_MAX_FN_LEN 256
|
#define CONST_READSHADER_MAX_FN_LEN 256
|
||||||
#define CONST_READSHADER_MAX_FN_SIZE 32*1024
|
#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];
|
char shader_fn[CONST_READSHADER_MAX_FN_LEN];
|
||||||
assert(strlen(fn) + 9 < CONST_READSHADER_MAX_FN_LEN);
|
assert(strlen(fn) + 9 < CONST_READSHADER_MAX_FN_LEN);
|
||||||
struct stat status_buffer;
|
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);
|
printf("%s\n", shader_fn);
|
||||||
|
|
||||||
if (stat(shader_fn, &status_buffer) == -1) {
|
if (stat(shader_fn, &status_buffer) == -1) {
|
||||||
printf("Failed to stat file '%s'\n", shader_fn);
|
printf("Failed to stat file '%s'\n", shader_fn);
|
||||||
return NULL;
|
return 0;
|
||||||
}
|
}
|
||||||
assert(status_buffer.st_size < CONST_READSHADER_MAX_FN_SIZE-1);
|
assert(status_buffer.st_size < CONST_READSHADER_MAX_FN_SIZE-1);
|
||||||
|
|
||||||
FILE *fh = fopen(shader_fn, "r");
|
FILE *fh = fopen(shader_fn, "r");
|
||||||
assert(fh != NULL);
|
assert(fh != NULL);
|
||||||
|
|
||||||
char *shader_data = (char *)malloc(CONST_READSHADER_MAX_FN_SIZE);
|
shdr_source = (GLchar *)malloc(CONST_READSHADER_MAX_FN_SIZE);
|
||||||
assert(shader_data != NULL);
|
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);
|
CONST_READSHADER_MAX_FN_SIZE-1, fh);
|
||||||
assert(read_bytes < CONST_READSHADER_MAX_FN_SIZE-1);
|
assert(read_bytes < CONST_READSHADER_MAX_FN_SIZE-1);
|
||||||
shader_data[read_bytes] = '\0';
|
shdr_source[read_bytes] = '\0';
|
||||||
|
|
||||||
|
puts(shdr_source);
|
||||||
|
|
||||||
fclose(fh);
|
fclose(fh);
|
||||||
|
assert(shdr_source != NULL);
|
||||||
|
|
||||||
return shader_data;
|
|
||||||
|
*pshdr_source = shdr_source;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void freeshader(void *shader_fh) {
|
void freeshader(void *pshdr_source) {
|
||||||
assert(shader_fh != NULL);
|
assert(pshdr_source != NULL);
|
||||||
free(shader_fh);
|
free(pshdr_source);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
|
|
||||||
|
#include <glad/glad.h>
|
||||||
|
|
||||||
char *readshader(const char *fn);
|
int readshader(const char *fn, GLchar **pshdr_source);
|
||||||
void freeshader(void *shader_fh);
|
void freeshader(void *pshdr_source);
|
Loading…
Add table
Add a link
Reference in a new issue