summary refs log tree commit diff
path: root/src/Util
diff options
context:
space:
mode:
Diffstat (limited to 'src/Util')
-rw-r--r--src/Util/ImageViewer.cpp68
-rw-r--r--src/Util/ImageViewer.hpp12
2 files changed, 13 insertions, 67 deletions
diff --git a/src/Util/ImageViewer.cpp b/src/Util/ImageViewer.cpp
index 4c78750..05d316c 100644
--- a/src/Util/ImageViewer.cpp
+++ b/src/Util/ImageViewer.cpp
@@ -1,38 +1,15 @@
-#include <GL/glew.h>
 #include "ImageViewer.hpp"
-#include "../Math/MVP.hpp"
 
 namespace MC::Util {
 
-ImageViewer::ImageViewer(
-        const GFX::Image::RawImage& image,
-        Real window_aspect
-) : m_texture(image),
-    m_program(
-        {GFX::Shading::Shader::Type::Vertex, vertex},
-        {GFX::Shading::Shader::Type::Fragment, fragment}
-    ),
-    m_mesh(create_mesh(window_aspect, image.width(), image.height())) {
-    m_program.bind();
-    auto model_uniform = m_program.uniform("model_matrix");
-    auto view_uniform = m_program.uniform("view_matrix");
-    auto projection_uniform = m_program.uniform("projection_matrix");
-
-    model_uniform.set(Math::MVP::model<F32>({}, Vector<3>::one(), {}));
-    view_uniform.set(Math::MVP::view<F32>({}, {}));
-    projection_uniform.set(Math::MVP::orthographic_projection<F32>(view_size * window_aspect, view_size, 0.0f, 100.0f));
-
-    m_program.unbind();
-}
-
-void ImageViewer::render() {
-    m_program.bind();
-    m_texture.bind();
-    m_mesh.bind();
-    glDrawElements(GL_TRIANGLES, m_mesh.size(), GL_UNSIGNED_INT, nullptr);
-    m_mesh.unbind();
-    m_texture.unbind();
-    m_program.unbind();
+void ImageViewer::render(GFX::Actions& actions) {
+    // TODO: Re-add texture support
+    // TODO: Add orthographic camera support
+    actions.add({
+        .program = GFX::Resources::Program::ImageViewer,
+        .mesh = &m_mesh,
+        .transform = Transform(),
+    });
 }
 
 GFX::Mesh ImageViewer::create_mesh(Real window_aspect, U32 image_width, U32 image_height) {
@@ -60,33 +37,4 @@ GFX::Mesh ImageViewer::create_mesh(Real window_aspect, U32 image_width, U32 imag
     }, {0, 1, 2, 0, 2, 3}};
 }
 
-const Char* ImageViewer::vertex = R"v(
-#version 330 core
-
-uniform mat4 model_matrix;
-uniform mat4 view_matrix;
-uniform mat4 projection_matrix;
-
-layout (location = 0) in vec3 position;
-layout (location = 1) in vec2 tex_coord;
-
-out vec2 frag_tex_coord;
-
-void main() {
-    gl_Position = projection_matrix * view_matrix * model_matrix * vec4(position, 1.0);
-    frag_tex_coord = tex_coord;
-})v";
-
-const Char* ImageViewer::fragment = R"f(
-#version 330 core
-
-uniform sampler2D image;
-
-in vec2 frag_tex_coord;
-out vec4 color;
-
-void main() {
-    color = texture(image, frag_tex_coord);
-})f";
-
 }
\ No newline at end of file
diff --git a/src/Util/ImageViewer.hpp b/src/Util/ImageViewer.hpp
index aa48b1e..cfe9d18 100644
--- a/src/Util/ImageViewer.hpp
+++ b/src/Util/ImageViewer.hpp
@@ -1,27 +1,25 @@
 #pragma once
 
+#include "../GFX/Actions.hpp"
 #include "../GFX/Mesh.hpp"
 #include "../GFX/Image/RawImage.hpp"
 #include "../GFX/Texture.hpp"
-#include "../GFX/Shading/Program.hpp"
 
 namespace MC::Util {
 
 class ImageViewer {
 public:
-    explicit ImageViewer(const GFX::Image::RawImage& image, Real window_aspect);
+    explicit ImageViewer(const GFX::Image::RawImage& image, Real window_aspect)
+        : m_mesh(create_mesh(window_aspect, image.width(), image.height())),
+          m_texture(image) {}
 
-    void render();
+    void render(GFX::Actions& actions);
 private:
     static GFX::Mesh create_mesh(Real window_aspect, U32 image_width, U32 image_height);
 
     static constexpr Real view_size = 1000.0f;
 
-    static const Char* vertex;
-    static const Char* fragment;
-
     GFX::Mesh m_mesh;
-    GFX::Shading::Program m_program;
     GFX::Texture m_texture;
 };