diff options
Diffstat (limited to 'src/Util')
| -rw-r--r-- | src/Util/ImageViewer.cpp | 59 | ||||
| -rw-r--r-- | src/Util/ImageViewer.hpp | 35 |
2 files changed, 94 insertions, 0 deletions
diff --git a/src/Util/ImageViewer.cpp b/src/Util/ImageViewer.cpp new file mode 100644 index 0000000..76faa3e --- /dev/null +++ b/src/Util/ImageViewer.cpp @@ -0,0 +1,59 @@ +#include <GL/glew.h> +#include "ImageViewer.hpp" + +namespace MC::Util { + +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(); +} + +GFX::Mesh ImageViewer::create_default_mesh() { + return {{ + std::vector<Vector<3>>{ + {0.0f, 1.0f, 0.0f}, // top left + {0.0f, 0.0f, 0.0f}, // bottom left + {1.0f, 0.0f, 0.0f}, // bottom right + {1.0f, 0.0f, 0.0f } // top right + }, + std::vector<Vector<2>>{ + {1.0f, 1.0f}, + {1.0f, 0.0f,}, + {0.0f, 0.0f}, + {0.0f, 1.0f}, + }, + }, {0, 1, 2, 0, 2, 3}}; +} + +const char* ImageViewer::vertex = R"v( +#version 330 core + +layout (location = 0) in vec3 position; +layout (location = 1) in vec2 tex_coord; + +out vec2 frag_tex_coord; + +void main() { + gl_Position = 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); + color = vec4(0.3, 0.5, 1.0, 1.0); +})f"; + +} \ No newline at end of file diff --git a/src/Util/ImageViewer.hpp b/src/Util/ImageViewer.hpp new file mode 100644 index 0000000..d583aa8 --- /dev/null +++ b/src/Util/ImageViewer.hpp @@ -0,0 +1,35 @@ +#pragma once + +#include "../GFX/Image/RawImage.hpp" +#include "../GFX/Binder.hpp" +#include "../GFX/Texture.hpp" +#include "../GFX/Shading/Program.hpp" + +namespace MC::Util { + +class ImageViewer { +public: + explicit ImageViewer( + GFX::Image::RawImage& image + ) : m_texture(image), + m_program( + {GFX::Shading::Shader::Type::Vertex, ImageViewer::vertex}, + {GFX::Shading::Shader::Type::Fragment, ImageViewer::fragment} + ), + m_mesh(GFX::Binder::load(default_mesh)) {}; + + void render(); +private: + static GFX::Mesh create_default_mesh(); + + static inline GFX::Mesh default_mesh = create_default_mesh(); + + static const char* vertex; + static const char* fragment; + + MC::GFX::BindableMesh m_mesh; + MC::GFX::Shading::Program m_program; + MC::GFX::Texture m_texture; +}; + +} \ No newline at end of file |
