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];
 | 
			
		||||
 | 
			
		||||
	// 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);
 | 
			
		||||
	glShaderSource(vertexShader, 1, &shdr_src_vertex, NULL);
 | 
			
		||||
	glCompileShader(vertexShader);
 | 
			
		||||
	glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
 | 
			
		||||
	freeshader(shdr_src_vertex);
 | 
			
		||||
 | 
			
		||||
	if (!success) {
 | 
			
		||||
		glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
 | 
			
		||||
		std::cout << "ERROR SHADER::VERTEX::Compilation Failed\n" << 
 | 
			
		||||
| 
						 | 
				
			
			@ -58,7 +60,8 @@ int main(void) {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	// 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);
 | 
			
		||||
	glShaderSource(fragmentShader, 1, &shdr_src_fragment, NULL);
 | 
			
		||||
	glCompileShader(fragmentShader);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
 | 
			
		||||
#include <glad/glad.h>
 | 
			
		||||
 | 
			
		||||
char *readshader(const char *fn);
 | 
			
		||||
void freeshader(void *shader_fh);
 | 
			
		||||
int readshader(const char *fn, GLchar **pshdr_source);
 | 
			
		||||
void freeshader(void *pshdr_source);
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue