Moved shaders to standalone source file
This commit is contained in:
@@ -6,7 +6,10 @@
|
||||
"generator": "Visual Studio 17 2022",
|
||||
"architecture": "x64",
|
||||
"binaryDir": "${sourceDir}/build",
|
||||
"toolchainFile": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
|
||||
"toolchainFile": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
|
||||
"cacheVariables": {
|
||||
"CMAKE_VS_DEBUGGER_WORKING_DIRECTORY": "${sourceDir}"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
8
assets/shaders/shader.frag
Normal file
8
assets/shaders/shader.frag
Normal file
@@ -0,0 +1,8 @@
|
||||
#version 150 core
|
||||
|
||||
in vec3 _color;
|
||||
out vec4 color;
|
||||
|
||||
void main() {
|
||||
color = vec4(_color, 1.0);
|
||||
}
|
||||
10
assets/shaders/shader.vert
Normal file
10
assets/shaders/shader.vert
Normal file
@@ -0,0 +1,10 @@
|
||||
#version 150 core
|
||||
|
||||
in vec2 position;
|
||||
in vec3 color;
|
||||
out vec3 _color;
|
||||
|
||||
void main() {
|
||||
_color = color;
|
||||
gl_Position = vec4(position, 0.0, 1.0);
|
||||
}
|
||||
@@ -47,16 +47,7 @@ App::App():
|
||||
if(glewInit() != GLEW_OK) {
|
||||
error_callback_s(GLFW_NO_ERROR, "glewInit() failed");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
App::~App() {
|
||||
glfwTerminate();
|
||||
glfwSetErrorCallback(NULL);
|
||||
}
|
||||
|
||||
|
||||
void App::game_loop() {
|
||||
float vertices[] = {
|
||||
.0f, .5f, 1.f, 0.f, 0.f,
|
||||
.5f, -.5f, 0.f, 1.f, 0.f,
|
||||
@@ -67,25 +58,10 @@ void App::game_loop() {
|
||||
glGenBuffers(1, &vbo);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, vbo);
|
||||
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
|
||||
|
||||
auto vertexSource = R"glsl(
|
||||
#version 150 core
|
||||
in vec2 position;
|
||||
in vec3 color;
|
||||
out vec3 _color;
|
||||
void main() { _color = color; gl_Position = vec4(position, 0.0, 1.0); }
|
||||
)glsl";
|
||||
|
||||
auto fragmentSource = R"glsl(
|
||||
#version 150 core
|
||||
in vec3 _color;
|
||||
out vec4 color;
|
||||
void main() { color = vec4(_color, 1.0); }
|
||||
)glsl";
|
||||
|
||||
GLuint shaderProgram = ugly::ShaderProgramBuilder{}
|
||||
.attachFromMemory(GL_VERTEX_SHADER, vertexSource)
|
||||
.attachFromMemory(GL_FRAGMENT_SHADER, fragmentSource)
|
||||
.attachFromFile(GL_VERTEX_SHADER, "assets/shaders/shader.vert")
|
||||
.attachFromFile(GL_FRAGMENT_SHADER, "assets/shaders/shader.frag")
|
||||
.link();
|
||||
glUseProgram(shaderProgram);
|
||||
|
||||
@@ -96,7 +72,16 @@ void App::game_loop() {
|
||||
glEnableVertexAttribArray(0);
|
||||
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 5*sizeof(float), (void*)(2*sizeof(float)));
|
||||
glEnableVertexAttribArray(1);
|
||||
}
|
||||
|
||||
|
||||
App::~App() {
|
||||
glfwTerminate();
|
||||
glfwSetErrorCallback(NULL);
|
||||
}
|
||||
|
||||
|
||||
void App::game_loop() {
|
||||
while(!glfwWindowShouldClose(mpWindow)) {
|
||||
glfwPollEvents();
|
||||
|
||||
|
||||
@@ -46,10 +46,10 @@ ugly::ShaderProgramBuilder &ugly::ShaderProgramBuilder::attachFromMemory(GLenum
|
||||
|
||||
|
||||
ugly::ShaderProgramBuilder &ugly::ShaderProgramBuilder::attachFromFile(GLenum type, const char *filename) {
|
||||
auto file = std::ifstream{filename};
|
||||
file.exceptions(std::ios_base::badbit);
|
||||
std::ostringstream ss;
|
||||
ss << file.rdbuf();
|
||||
auto file = std::filebuf{};
|
||||
auto ss = std::ostringstream{};
|
||||
ss.exceptions(std::ios_base::badbit);
|
||||
ss << file.open(filename, std::ios_base::in);
|
||||
return attachFromMemory(type, ss.str().c_str());
|
||||
}
|
||||
|
||||
@@ -63,7 +63,7 @@ GLuint ugly::ShaderProgramBuilder::link() {
|
||||
char buf[512];
|
||||
glGetProgramInfoLog(mProgram, 512, NULL, buf);
|
||||
std::cerr << "Failed to link program:\n\t" << buf << '\n';
|
||||
throw Error{"program failed to link"};
|
||||
throw Error{"program failed to link"};
|
||||
}
|
||||
|
||||
auto result = mProgram;
|
||||
|
||||
Reference in New Issue
Block a user