Implemented ShaderProgramBuilder
This commit is contained in:
@@ -13,4 +13,5 @@ target_link_libraries(${PROJECT_NAME}
|
||||
GLEW::GLEW
|
||||
glfw
|
||||
glm::glm
|
||||
UglyShaderLib
|
||||
)
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include <GL/glew.h>
|
||||
#include <GLFW/glfw3.h>
|
||||
|
||||
#include "ShaderProgramBuilder.hpp"
|
||||
|
||||
int App::main(std::vector<std::string> &args) {
|
||||
auto app = App{};
|
||||
@@ -57,9 +58,9 @@ App::~App() {
|
||||
|
||||
void App::game_loop() {
|
||||
float vertices[] = {
|
||||
.0f, .5f,
|
||||
.5f, -.5f,
|
||||
-.5f, -.5f
|
||||
.0f, .5f, 1.f, 0.f, 0.f,
|
||||
.5f, -.5f, 0.f, 1.f, 0.f,
|
||||
-.5f, -.5f, 0.f, 0.f, 1.f
|
||||
};
|
||||
|
||||
GLuint vbo;
|
||||
@@ -70,56 +71,38 @@ void App::game_loop() {
|
||||
auto vertexSource = R"glsl(
|
||||
#version 150 core
|
||||
in vec2 position;
|
||||
void main() { gl_Position = vec4(position, 0.0, 1.0); }
|
||||
in vec3 color;
|
||||
out vec3 _color;
|
||||
void main() { _color = color; gl_Position = vec4(position, 0.0, 1.0); }
|
||||
)glsl";
|
||||
|
||||
GLint status;
|
||||
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
|
||||
glShaderSource(vertexShader, 1, &vertexSource, NULL);
|
||||
glCompileShader(vertexShader);
|
||||
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &status);
|
||||
if(!status) {
|
||||
error_callback_s(GLFW_NO_ERROR, "glShaderSource() failed");
|
||||
}
|
||||
|
||||
auto fragmentSource = R"glsl(
|
||||
#version 150 core
|
||||
uniform vec3 triangleColor;
|
||||
in vec3 _color;
|
||||
out vec4 color;
|
||||
void main() { color = vec4(triangleColor, 1.0); }
|
||||
void main() { color = vec4(_color, 1.0); }
|
||||
)glsl";
|
||||
|
||||
|
||||
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
|
||||
glShaderSource(fragmentShader, 1, &fragmentSource, NULL);
|
||||
glCompileShader(fragmentShader);
|
||||
glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &status);
|
||||
if(!status) {
|
||||
error_callback_s(GLFW_NO_ERROR, "glShaderSource() failed");
|
||||
}
|
||||
|
||||
GLuint shaderProgram = glCreateProgram();
|
||||
glAttachShader(shaderProgram, vertexShader);
|
||||
glAttachShader(shaderProgram, fragmentShader);
|
||||
glLinkProgram(shaderProgram);
|
||||
GLuint shaderProgram = ugly::ShaderProgramBuilder{}
|
||||
.attachFromMemory(GL_VERTEX_SHADER, vertexSource)
|
||||
.attachFromMemory(GL_FRAGMENT_SHADER, fragmentSource)
|
||||
.link();
|
||||
glUseProgram(shaderProgram);
|
||||
|
||||
GLuint vao;
|
||||
glGenVertexArrays(1, &vao);
|
||||
glBindVertexArray(vao);
|
||||
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
|
||||
glEnableVertexAttribArray(0);
|
||||
|
||||
auto start = glfwGetTime();
|
||||
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 5*sizeof(float), 0);
|
||||
glEnableVertexAttribArray(0);
|
||||
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 5*sizeof(float), (void*)(2*sizeof(float)));
|
||||
glEnableVertexAttribArray(1);
|
||||
|
||||
while(!glfwWindowShouldClose(mpWindow)) {
|
||||
glfwPollEvents();
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
glDrawArrays(GL_TRIANGLES, 0, 3);
|
||||
|
||||
auto now = glfwGetTime();
|
||||
glUniform3f(glGetUniformLocation(shaderProgram, "triangleColor"), (sin(now-start) + 1.0f) / 2.0f, 0.0f, 0.0f);
|
||||
|
||||
glfwSwapBuffers(mpWindow);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user