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