shader update strings
This commit is contained in:
@@ -1,6 +1,3 @@
|
|||||||
#include <fstream>
|
|
||||||
#include <sstream>
|
|
||||||
#include <iostream>
|
|
||||||
#include "Shader.h"
|
#include "Shader.h"
|
||||||
#include "../lib/djstdlib/core.h"
|
#include "../lib/djstdlib/core.h"
|
||||||
#include "../lib/glad/glad.h"
|
#include "../lib/glad/glad.h"
|
||||||
@@ -10,35 +7,34 @@ enum ShaderType {
|
|||||||
vertex=GL_VERTEX_SHADER,
|
vertex=GL_VERTEX_SHADER,
|
||||||
};
|
};
|
||||||
|
|
||||||
uint32 createGlShader(const char* file_path, ShaderType shader_type, char* info_log) {
|
uint32 createGlShader(string file_path, ShaderType shader_type) {
|
||||||
std::stringstream shader_stream;
|
Scratch temp = scratchStart(0, 0);
|
||||||
std::ifstream shader_file;
|
string shader_code = readEntireFile(temp.arena, file_path);
|
||||||
shader_file.open(file_path);
|
GLuint shader = glCreateShader(shader_type);
|
||||||
shader_stream << shader_file.rdbuf();
|
const char *shader_code_cstr = cstring(temp.arena, shader_code);
|
||||||
shader_file.close();
|
glShaderSource(shader, 1, &shader_code_cstr, NULL);
|
||||||
std::string string = shader_stream.str();
|
glCompileShader(shader);
|
||||||
const char *shader_code = string.c_str();
|
|
||||||
|
|
||||||
GLuint vertex_shader = glCreateShader(shader_type);
|
|
||||||
glShaderSource(vertex_shader, 1, &shader_code, NULL);
|
|
||||||
glCompileShader(vertex_shader);
|
|
||||||
int success;
|
int success;
|
||||||
glGetShaderiv(vertex_shader, GL_COMPILE_STATUS, &success);
|
glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
|
||||||
if (!success) {
|
if (!success) {
|
||||||
glGetShaderInfoLog(vertex_shader, 512, NULL, info_log);
|
GLint info_log_length;
|
||||||
|
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &info_log_length);
|
||||||
|
string info_log = PushString(temp.arena, (size_t)info_log_length + 1);
|
||||||
|
glGetShaderInfoLog(shader, info_log_length, NULL, info_log.str);
|
||||||
const char* shader_type_name = shader_type == ShaderType::fragment ? "FRAGMENT" : "VERTEX";
|
const char* shader_type_name = shader_type == ShaderType::fragment ? "FRAGMENT" : "VERTEX";
|
||||||
std::cout << "ERROR::SHADER::" << shader_type_name << "::COMPILATION_FAILED\n" << info_log << std::endl;
|
log("%s shader compilation error (%S):\n%S", shader_type_name, file_path, info_log);
|
||||||
}
|
}
|
||||||
|
scratchEnd(temp);
|
||||||
return vertex_shader;
|
return shader;
|
||||||
}
|
}
|
||||||
|
|
||||||
Shader createShader(const char* vertex_path, const char* fragment_path) {
|
Shader createShader(string vertex_path, string fragment_path) {
|
||||||
|
Scratch temp = scratchStart(0, 0);
|
||||||
|
|
||||||
Shader result = {0};
|
Shader result = {0};
|
||||||
|
|
||||||
char info_log[512] = {0};
|
uint32 vertex_shader = createGlShader(vertex_path, ShaderType::vertex);
|
||||||
uint32 vertex_shader = createGlShader(vertex_path, ShaderType::vertex, info_log);
|
uint32 fragment_shader = createGlShader(fragment_path, ShaderType::fragment);
|
||||||
uint32 fragment_shader = createGlShader(fragment_path, ShaderType::fragment, info_log);
|
|
||||||
|
|
||||||
result.prog_id = glCreateProgram();
|
result.prog_id = glCreateProgram();
|
||||||
glAttachShader(result.prog_id, vertex_shader);
|
glAttachShader(result.prog_id, vertex_shader);
|
||||||
@@ -48,13 +44,17 @@ Shader createShader(const char* vertex_path, const char* fragment_path) {
|
|||||||
int success;
|
int success;
|
||||||
glGetProgramiv(result.prog_id, GL_LINK_STATUS, &success);
|
glGetProgramiv(result.prog_id, GL_LINK_STATUS, &success);
|
||||||
if (!success) {
|
if (!success) {
|
||||||
glGetProgramInfoLog(result.prog_id, 512, NULL, info_log);
|
GLint info_log_length;
|
||||||
std::cout << "ERROR::SHADER::PROGRAM::LINK_FAILED\n" << info_log << std::endl;
|
glGetShaderiv(result.prog_id, GL_INFO_LOG_LENGTH, &info_log_length);
|
||||||
|
string info_log_prog = PushString(temp.arena, (size_t)info_log_length + 1);
|
||||||
|
glGetProgramInfoLog(result.prog_id, info_log_length, NULL, info_log_prog.str);
|
||||||
|
log("Shader program link error:\n%S", info_log_prog);
|
||||||
}
|
}
|
||||||
|
|
||||||
glDeleteShader(vertex_shader);
|
glDeleteShader(vertex_shader);
|
||||||
glDeleteShader(fragment_shader);
|
glDeleteShader(fragment_shader);
|
||||||
|
|
||||||
|
scratchEnd(temp);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
#ifndef LEDDA_SHADER_H
|
#ifndef LEDDA_SHADER_H
|
||||||
#define LEDDA_SHADER_H
|
#define LEDDA_SHADER_H
|
||||||
|
|
||||||
|
#include "../lib/djstdlib/core.h"
|
||||||
|
|
||||||
struct Shader {
|
struct Shader {
|
||||||
unsigned int prog_id;
|
uint32 prog_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
Shader createShader(const char* vertex_path, const char* fragment_path);
|
Shader createShader(string vertex_path, string fragment_path);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
14
src/main.cpp
14
src/main.cpp
@@ -300,20 +300,20 @@ int main_cmd() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int main_gfx() {
|
int main_gfx() {
|
||||||
|
Arena *arena = arenaAlloc(Megabytes(128));
|
||||||
|
|
||||||
WindowDims window_dims = { 800, 600 };
|
WindowDims window_dims = { 800, 600 };
|
||||||
GLFWwindow *window = init_window_and_gl(&window_dims);
|
GLFWwindow *window = init_window_and_gl(&window_dims);
|
||||||
if (!window) {
|
if (!window) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Arena *arena = arenaAlloc(Megabytes(128));
|
app_state.current_polycube = 0;
|
||||||
|
app_state.last_polycube_visible = 6;
|
||||||
|
app_state.active_shader = 0;
|
||||||
|
app_state.polycubes = {};
|
||||||
|
|
||||||
app_state.current_polycube=0;
|
Shader phong_shader = createShader("../assets/shaders/phong-solid.vertex.glsl"_s, "../assets/shaders/phong-solid.fragment.glsl"_s);
|
||||||
app_state.last_polycube_visible=6;
|
|
||||||
app_state.active_shader=0;
|
|
||||||
app_state.polycubes={};
|
|
||||||
|
|
||||||
Shader phong_shader = createShader("../assets/shaders/phong-solid.vertex.glsl", "../assets/shaders/phong-solid.fragment.glsl");
|
|
||||||
app_state.active_shader = &phong_shader;
|
app_state.active_shader = &phong_shader;
|
||||||
|
|
||||||
cube_mesh = createMesh("../assets/models/c000000.obj");
|
cube_mesh = createMesh("../assets/models/c000000.obj");
|
||||||
|
|||||||
Reference in New Issue
Block a user