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