diff --git a/meson.build b/meson.build index df15915..4758f3a 100644 --- a/meson.build +++ b/meson.build @@ -2,5 +2,6 @@ project('opengl-learning', 'cpp', 'c', default_options: ['cpp_std=c++20']) glfw = dependency('glfw3') libepoxy = dependency('epoxy') +glm = dependency('glm') subdir('src') diff --git a/src/main.cc b/src/main.cc index ff0ea84..9462527 100644 --- a/src/main.cc +++ b/src/main.cc @@ -1,5 +1,7 @@ #include #include +#include +#include #include #include @@ -202,6 +204,10 @@ int main() { shader.setInt("texture1", 0); shader.setInt("texture2", 1); + // glm::mat4 trans = glm::mat4(1.0f); + // trans = glm::rotate(trans, glm::radians(90.0f), glm::vec3(0.0, 0.0, 1.0)); + // trans = glm::scale(trans, glm::vec3(0.5, 0.5, 0.5)); + // Create a render loop, which keeps the program open until glfw tells the loop that the window should close. while (!glfwWindowShouldClose(window)) { // Process input. @@ -224,6 +230,15 @@ int main() { shader.activate(); + // create the identity matrix + glm::mat4 trans(1); + // translate it by this vector3 + trans = glm::translate(trans, glm::vec3(0.5f, -0.5f, 0.0f)); + // rotate by the z axis with the angle being controlled by time + trans = glm::rotate(trans, (float)glfwGetTime(), glm::vec3(0.0f, 0.0f, 1.0f)); + + shader.setMat4("transform", trans); + if (!rectangleToggled) { // Bind the state to use the vertexArrayObject object so OpenGL knows what to do with the verticies. glBindVertexArray(triangleRenderObjs.vertexArrayObject); diff --git a/src/meson.build b/src/meson.build index 902cb98..4c0f135 100644 --- a/src/meson.build +++ b/src/meson.build @@ -12,5 +12,5 @@ vertex = custom_target('vertex', output: 'vertex.glsl', input: 'vertex.glsl', co container = custom_target('container', output: 'container.jpg', input: 'container.jpg', command: [copy, '@INPUT@', '@OUTPUT@']) awesomeface = custom_target('awesomeface', output: 'awesomeface.png', input: 'awesomeface.png', command: [copy, '@INPUT@', '@OUTPUT@']) -executable('main', [sources, fragment, vertex, container, awesomeface], dependencies: [glfw, libepoxy]) +executable('main', [sources, fragment, vertex, container, awesomeface], dependencies: [glfw, libepoxy, glm]) executable('fixedfunction', ['fixedfunction.cc'], dependencies: [glfw, libepoxy]) diff --git a/src/shader.cc b/src/shader.cc index a751cbc..3f7c89b 100644 --- a/src/shader.cc +++ b/src/shader.cc @@ -103,3 +103,7 @@ void Shader::setInt(const char* name, int value) { void Shader::setFloat(const char* name, float value) const { glUniform1f(glGetUniformLocation(id, name), value); } + +void Shader::setMat4(const char* name, glm::mat4 matrix) { + glUniformMatrix4fv(glGetUniformLocation(id, name), 1, GL_FALSE, glm::value_ptr(matrix)); +} diff --git a/src/shader.hh b/src/shader.hh index e7877bd..1ff7be1 100644 --- a/src/shader.hh +++ b/src/shader.hh @@ -2,6 +2,9 @@ #define SHADER_HH #include #include +#include +#include + class Shader { public: // The Shader ID. @@ -17,6 +20,7 @@ class Shader { void setBool(const char* name, bool value) const; void setInt(const char* name, int value) ; void setFloat(const char* name, float value) const; + void setMat4(const char* name, glm::mat4 matrix); private: uint compileShader(std::string code, GLenum type, std::string shaderTypeName); uint compileVertexShader(std::string code); diff --git a/src/vertex.glsl b/src/vertex.glsl index e5f864f..18dbccf 100644 --- a/src/vertex.glsl +++ b/src/vertex.glsl @@ -7,8 +7,10 @@ layout (location = 2) in vec2 aTexCoord; out vec3 ourColor; out vec2 TexCoord; +uniform mat4 transform; + void main() { - gl_Position = vec4(aPos, 1.0); + gl_Position = transform * vec4(aPos, 1.0); ourColor = aColor; TexCoord = aTexCoord; }