Skip to content

Commit

Permalink
dont use layout
Browse files Browse the repository at this point in the history
  • Loading branch information
cgytrus committed Sep 12, 2023
1 parent ddd1aa8 commit e42f949
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 24 deletions.
6 changes: 2 additions & 4 deletions resources/shaders/pp-vert.glsl
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
#version 120
#extension GL_ARB_explicit_attrib_location : require
#extension GL_ARB_separate_shader_objects : require

attribute layout(location = 0) vec2 aPosition;
attribute layout(location = 1) vec2 aTexCoords;
attribute vec2 aPosition;
attribute vec2 aTexCoords;

varying vec2 TexCoords;

Expand Down
70 changes: 50 additions & 20 deletions src/pp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@ using namespace geode::prelude;

// cuz mac also ccglprogram is annoying anyway fuck ccglprogram all my homies do shaders manually
struct Shader {
GLuint vertex = 0;
GLuint fragment = 0;
GLuint program = 0;

Result<std::string> setup(
Result<std::string> compile(
const ghc::filesystem::path& vertexPath,
const ghc::filesystem::path& fragmentPath
) {
Expand All @@ -34,20 +36,9 @@ struct Shader {
delete[] stuff;
return result;
};
auto getProgramLog = [](GLuint id) -> std::string {
GLint length, written;
glGetProgramiv(id, GL_INFO_LOG_LENGTH, &length);
if (length <= 0)
return "";
auto stuff = new char[length + 1];
glGetProgramInfoLog(id, length, &written, stuff);
std::string result(stuff);
delete[] stuff;
return result;
};
GLint res;

GLuint vertex = glCreateShader(GL_VERTEX_SHADER);
vertex = glCreateShader(GL_VERTEX_SHADER);
auto oglSucks = vertexSource.unwrap().c_str();
glShaderSource(vertex, 1, &oglSucks, nullptr);
glCompileShader(vertex);
Expand All @@ -56,10 +47,11 @@ struct Shader {
glGetShaderiv(vertex, GL_COMPILE_STATUS, &res);
if(!res) {
glDeleteShader(vertex);
vertex = 0;
return Err("vertex shader compilation failed:\n{}", vertexLog);
}

GLuint fragment = glCreateShader(GL_FRAGMENT_SHADER);
fragment = glCreateShader(GL_FRAGMENT_SHADER);
oglSucks = fragmentSource.unwrap().c_str();
glShaderSource(fragment, 1, &oglSucks, nullptr);
glCompileShader(fragment);
Expand All @@ -69,17 +61,47 @@ struct Shader {
if(!res) {
glDeleteShader(vertex);
glDeleteShader(fragment);
vertex = 0;
fragment = 0;
return Err("fragment shader compilation failed:\n{}", fragmentLog);
}

program = glCreateProgram();
glAttachShader(program, vertex);
glAttachShader(program, fragment);

return Ok(fmt::format(
"shader compilation successful. logs:\nvert:\n{}\nfrag:\n{}",
vertexLog, fragmentLog
));
}

Result<std::string> link() {
if (!vertex)
return Err("vertex shader not compiled");
if (!fragment)
return Err("fragment shader not compiled");

auto getProgramLog = [](GLuint id) -> std::string {
GLint length, written;
glGetProgramiv(id, GL_INFO_LOG_LENGTH, &length);
if (length <= 0)
return "";
auto stuff = new char[length + 1];
glGetProgramInfoLog(id, length, &written, stuff);
std::string result(stuff);
delete[] stuff;
return result;
};
GLint res;

glLinkProgram(program);
auto programLog = getProgramLog(program);

glDeleteShader(vertex);
glDeleteShader(fragment);
vertex = 0;
fragment = 0;

glGetProgramiv(program, GL_LINK_STATUS, &res);
if(!res) {
Expand All @@ -88,10 +110,7 @@ struct Shader {
return Err("shader link failed:\n{}", programLog);
}

return Ok(fmt::format(
"shader compilation successful. logs:\nvert:\n{}\nfrag:\n{}\nprogram:\n{}",
vertexLog, fragmentLog, programLog
));
return Ok(fmt::format("shader link successful. log:\n{}", programLog));
}

void cleanup() {
Expand Down Expand Up @@ -192,12 +211,23 @@ void setupPostProcess() {
auto vertexPath = (std::string)CCFileUtils::get()->fullPathForFilename("pp-vert.glsl"_spr, false);
auto fragmentPath = (std::string)CCFileUtils::get()->fullPathForFilename("pp-frag.glsl"_spr, false);

auto res = ppShader.setup(vertexPath, fragmentPath);
auto res = ppShader.compile(vertexPath, fragmentPath);
if (!res) {
log::error("Failed to set up shader: {}", res.unwrapErr());
log::error("Failed to compile shader: {}", res.unwrapErr());
return;
}
log::info("{}", res.unwrap());

glBindAttribLocation(ppShader.program, 0, "aPosition");
glBindAttribLocation(ppShader.program, 1, "aTexCoords");

res = ppShader.link();
if (!res) {
log::error("Failed to link shader: {}", res.unwrapErr());
return;
}
log::info("{}", res.unwrap());

ccGLUseProgram(ppShader.program);
glUniform1i(glGetUniformLocation(ppShader.program, "screen"), 0);
glUniform2f(glGetUniformLocation(ppShader.program, "screenSize"), size.width, size.height);
Expand Down

0 comments on commit e42f949

Please sign in to comment.