shaders
This commit is contained in:
@@ -1,15 +1,15 @@
|
||||
#include "shader.h"
|
||||
|
||||
#include "render.h"
|
||||
#include "config.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include "font.h"
|
||||
#include "log.h"
|
||||
#include "render.h"
|
||||
#include "resources.h"
|
||||
#include "stb_ds.h"
|
||||
#include "timer.h"
|
||||
#include "font.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "time.h"
|
||||
|
||||
@@ -17,110 +17,104 @@
|
||||
|
||||
static struct shader *shaders;
|
||||
|
||||
struct shader *MakeShader(const char *vertpath, const char *fragpath)
|
||||
{
|
||||
if (arrcap(shaders) == 0)
|
||||
arrsetcap(shaders, 20);
|
||||
struct shader *MakeShader(const char *vertpath, const char *fragpath) {
|
||||
if (arrcap(shaders) == 0)
|
||||
arrsetcap(shaders, 20);
|
||||
|
||||
struct shader init = {
|
||||
.vertpath = vertpath,
|
||||
.fragpath = fragpath };
|
||||
shader_compile(&init);
|
||||
arrput(shaders, init);
|
||||
return &arrlast(shaders);
|
||||
struct shader init = {
|
||||
.vertpath = vertpath,
|
||||
.fragpath = fragpath};
|
||||
shader_compile(&init);
|
||||
arrput(shaders, init);
|
||||
return &arrlast(shaders);
|
||||
}
|
||||
|
||||
int shader_compile_error(int shader)
|
||||
{
|
||||
/*
|
||||
GLint success = 0;
|
||||
GLchar infoLog[ERROR_BUFFER] = { '\0' };
|
||||
int shader_compile_error(int shader) {
|
||||
/*
|
||||
GLint success = 0;
|
||||
GLchar infoLog[ERROR_BUFFER] = { '\0' };
|
||||
|
||||
glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
|
||||
if (success) return 0;
|
||||
glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
|
||||
if (success) return 0;
|
||||
|
||||
glGetShaderInfoLog(shader, ERROR_BUFFER, NULL, infoLog);
|
||||
YughLog(0, LOG_ERROR, "Shader compilation error.\nLog: %s", infoLog);
|
||||
glGetShaderInfoLog(shader, ERROR_BUFFER, NULL, infoLog);
|
||||
YughLog(0, LOG_ERROR, "Shader compilation error.\nLog: %s", infoLog);
|
||||
|
||||
return 1;
|
||||
*/
|
||||
return 1;
|
||||
*/
|
||||
}
|
||||
|
||||
int shader_link_error(int shader)
|
||||
{
|
||||
/*
|
||||
GLint success = 0;
|
||||
GLchar infoLog[ERROR_BUFFER] = { '\0' };
|
||||
int shader_link_error(int shader) {
|
||||
/*
|
||||
GLint success = 0;
|
||||
GLchar infoLog[ERROR_BUFFER] = { '\0' };
|
||||
|
||||
glGetProgramiv(shader, GL_LINK_STATUS, &success);
|
||||
if (success) return 0;
|
||||
glGetProgramiv(shader, GL_LINK_STATUS, &success);
|
||||
if (success) return 0;
|
||||
|
||||
glGetProgramInfoLog(shader, ERROR_BUFFER, NULL, infoLog);
|
||||
YughLog(0, LOG_ERROR, "Shader link error.\nLog: %s", infoLog);
|
||||
glGetProgramInfoLog(shader, ERROR_BUFFER, NULL, infoLog);
|
||||
YughLog(0, LOG_ERROR, "Shader link error.\nLog: %s", infoLog);
|
||||
|
||||
return 1;
|
||||
*/
|
||||
return 1;
|
||||
*/
|
||||
}
|
||||
|
||||
int load_shader_from_file(const char *path, int type)
|
||||
{
|
||||
char spath[MAXPATH] = {'\0'};
|
||||
int load_shader_from_file(const char *path, int type) {
|
||||
char spath[MAXPATH] = {'\0'};
|
||||
|
||||
sprintf(spath, "%s%s", "shaders/", path);
|
||||
FILE *f = fopen(make_path(spath), "r'");
|
||||
if (!path)
|
||||
perror(spath), exit(1);
|
||||
sprintf(spath, "%s%s", "shaders/", path);
|
||||
FILE *f = fopen(make_path(spath), "r'");
|
||||
if (!path)
|
||||
perror(spath), exit(1);
|
||||
|
||||
char *buf;
|
||||
long int fsize;
|
||||
fseek(f, 0, SEEK_END);
|
||||
fsize = ftell(f);
|
||||
buf = malloc(fsize+1);
|
||||
rewind(f);
|
||||
size_t r = fread(buf, sizeof(char), fsize, f);
|
||||
buf[r] = '\0';
|
||||
char *buf;
|
||||
long int fsize;
|
||||
fseek(f, 0, SEEK_END);
|
||||
fsize = ftell(f);
|
||||
buf = malloc(fsize + 1);
|
||||
rewind(f);
|
||||
size_t r = fread(buf, sizeof(char), fsize, f);
|
||||
buf[r] = '\0';
|
||||
|
||||
fclose(f);
|
||||
fclose(f);
|
||||
|
||||
/*
|
||||
GLuint id = glCreateShader(type);
|
||||
const char *code = buf;
|
||||
glShaderSource(id, 1, &code, NULL);
|
||||
glCompileShader(id);
|
||||
if (shader_compile_error(id)) {
|
||||
YughError("Error with shader %s.", path);
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
GLuint id = glCreateShader(type);
|
||||
const char *code = buf;
|
||||
glShaderSource(id, 1, &code, NULL);
|
||||
glCompileShader(id);
|
||||
if (shader_compile_error(id)) {
|
||||
YughError("Error with shader %s.", path);
|
||||
return 0;
|
||||
}
|
||||
|
||||
free(buf);
|
||||
|
||||
free(buf);
|
||||
|
||||
return id;
|
||||
*/
|
||||
|
||||
return id;
|
||||
*/
|
||||
}
|
||||
|
||||
void shader_compile(struct shader *shader)
|
||||
{
|
||||
YughInfo("Making shader with %s and %s.", shader->vertpath, shader->fragpath);
|
||||
char spath[MAXPATH];
|
||||
sprintf(spath,"%s%s", "shaders/", shader->vertpath);
|
||||
const char *vsrc = slurp_text(spath);
|
||||
sprintf(spath, "%s%s", "shaders/", shader->fragpath);
|
||||
const char *fsrc = slurp_text(spath);
|
||||
void shader_compile(struct shader *shader) {
|
||||
YughInfo("Making shader with %s and %s.", shader->vertpath, shader->fragpath);
|
||||
char spath[MAXPATH];
|
||||
sprintf(spath, "%s%s", "shaders/", shader->vertpath);
|
||||
const char *vsrc = slurp_text(spath);
|
||||
sprintf(spath, "%s%s", "shaders/", shader->fragpath);
|
||||
const char *fsrc = slurp_text(spath);
|
||||
|
||||
shader->shd = sg_make_shader(&(sg_shader_desc){
|
||||
shader->shd = sg_make_shader(&(sg_shader_desc){
|
||||
.vs.source = vsrc,
|
||||
.fs.source = fsrc,
|
||||
.label = shader->vertpath,
|
||||
});
|
||||
|
||||
free(vsrc);
|
||||
free(fsrc);
|
||||
});
|
||||
|
||||
free(vsrc);
|
||||
free(fsrc);
|
||||
}
|
||||
|
||||
void shader_use(struct shader *shader)
|
||||
{
|
||||
// glUseProgram(shader->id);
|
||||
void shader_use(struct shader *shader) {
|
||||
// glUseProgram(shader->id);
|
||||
}
|
||||
/*
|
||||
void shader_setbool(struct shader *shader, const char *name, int val)
|
||||
@@ -171,16 +165,13 @@ void shader_setUBO(struct shader *shader, const char *name, unsigned int index)
|
||||
|
||||
*/
|
||||
|
||||
void shader_compile_all()
|
||||
{
|
||||
for (int i = 0; i < arrlen(shaders); i++)
|
||||
shader_compile(&shaders[i]);
|
||||
void shader_compile_all() {
|
||||
for (int i = 0; i < arrlen(shaders); i++)
|
||||
shader_compile(&shaders[i]);
|
||||
}
|
||||
void shader_setvec3(struct shader *shader, const char *name, mfloat_t val[3])
|
||||
{
|
||||
// glUniform3fv(glGetUniformLocation(shader->id, name), 1, val);
|
||||
void shader_setvec3(struct shader *shader, const char *name, mfloat_t val[3]) {
|
||||
// glUniform3fv(glGetUniformLocation(shader->id, name), 1, val);
|
||||
}
|
||||
void shader_setmat4(struct shader *shader, const char *name, mfloat_t val[16])
|
||||
{
|
||||
// glUniformMatrix4fv(glGetUniformLocation(shader->id, name), 1, GL_FALSE, val);
|
||||
void shader_setmat4(struct shader *shader, const char *name, mfloat_t val[16]) {
|
||||
// glUniformMatrix4fv(glGetUniformLocation(shader->id, name), 1, GL_FALSE, val);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user