diff --git a/CMakePresets.json b/CMakePresets.json index 9a228e6..ce8da09 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -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}" + } } ] } diff --git a/assets/shaders/shader.frag b/assets/shaders/shader.frag new file mode 100644 index 0000000..cca0412 --- /dev/null +++ b/assets/shaders/shader.frag @@ -0,0 +1,8 @@ +#version 150 core + +in vec3 _color; +out vec4 color; + +void main() { + color = vec4(_color, 1.0); +} \ No newline at end of file diff --git a/assets/shaders/shader.vert b/assets/shaders/shader.vert new file mode 100644 index 0000000..66e6211 --- /dev/null +++ b/assets/shaders/shader.vert @@ -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); +} \ No newline at end of file diff --git a/source/app/src/App.cpp b/source/app/src/App.cpp index 2b9d3e6..7e50cfd 100644 --- a/source/app/src/App.cpp +++ b/source/app/src/App.cpp @@ -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(); diff --git a/source/shader/src/ShaderProgramBuilder.cpp b/source/shader/src/ShaderProgramBuilder.cpp index 0c57751..05e3a27 100644 --- a/source/shader/src/ShaderProgramBuilder.cpp +++ b/source/shader/src/ShaderProgramBuilder.cpp @@ -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;