diff --git a/data/shared/shaders/ui.frag b/data/shared/shaders/texture.frag similarity index 100% rename from data/shared/shaders/ui.frag rename to data/shared/shaders/texture.frag diff --git a/data/shared/shaders/ui.vert b/data/shared/shaders/texture.vert similarity index 100% rename from data/shared/shaders/ui.vert rename to data/shared/shaders/texture.vert diff --git a/data/testtexture/shaders/texture.frag b/data/testtexture/shaders/texture.frag deleted file mode 100644 index 0b6a7e988..000000000 --- a/data/testtexture/shaders/texture.frag +++ /dev/null @@ -1,8 +0,0 @@ -$out vec4 o_color; -$in vec2 v_texcoord; - -uniform sampler2D u_texture; - -void main() { - o_color = $texture2D(u_texture, v_texcoord); -} diff --git a/data/testtexture/shaders/texture.vert b/data/testtexture/shaders/texture.vert deleted file mode 100644 index 7c1b2f295..000000000 --- a/data/testtexture/shaders/texture.vert +++ /dev/null @@ -1,11 +0,0 @@ -uniform mat4 u_view; -uniform mat4 u_model; -uniform mat4 u_projection; -$in vec3 a_pos; -$in vec2 a_texcoord; -$out vec2 v_texcoord; - -void main(void) { - v_texcoord = a_texcoord; - gl_Position = u_projection * u_view * u_model * vec4(a_pos, 1.0); -} diff --git a/src/modules/frontend/MapRenderer.cpp b/src/modules/frontend/MapRenderer.cpp new file mode 100644 index 000000000..4d22a0a4c --- /dev/null +++ b/src/modules/frontend/MapRenderer.cpp @@ -0,0 +1,38 @@ +/** + * @file + */ + +#include "MapRenderer.h" +#include "video/ScopedFrameBuffer.h" + +namespace frontend { + +MapRenderer::MapRenderer(const voxel::WorldPtr& world) : + _world(world) { +} + +void MapRenderer::shutdown() { + _frameBuffer.shutdown(); +} + +bool MapRenderer::init() { + // TODO: size + const glm::vec2 dim(42, 42); + if (!_frameBuffer.init(dim)) { + return false; + } + // TODO: setup shader + return true; +} + +void MapRenderer::updateMiniMap() { + // TODO: render minimap to texture + video::ScopedFrameBuffer scoped(_frameBuffer); +} + +int MapRenderer::renderMiniMap(const video::Camera& camera, const glm::vec2& pos, int* vertices) { + // TODO: render fbo in ortho mode to the given coordinates + return 0; +} + +} diff --git a/src/modules/frontend/MapRenderer.h b/src/modules/frontend/MapRenderer.h new file mode 100644 index 000000000..42fa0c30e --- /dev/null +++ b/src/modules/frontend/MapRenderer.h @@ -0,0 +1,34 @@ +/** + * @file + */ + +#pragma once + +#include "voxel/World.h" +#include "video/Camera.h" +#include "video/FrameBuffer.h" +#include "FrontendShaders.h" + +namespace frontend { + +/** + * @brief Class to render the minimap and the worldmap of the voxel chunks + */ +class MapRenderer { +private: + voxel::WorldPtr _world; + video::FrameBuffer _frameBuffer; +public: + MapRenderer(const voxel::WorldPtr& world); + + bool init(); + void shutdown(); + + // TODO: maybe the list of chunks to include in the minimap? That way we can also use this class + // for the worldmap + void updateMiniMap(); + + int renderMiniMap(const video::Camera& camera, const glm::vec2& pos, int* vertices); +}; + +} diff --git a/src/modules/ui/CMakeLists.txt b/src/modules/ui/CMakeLists.txt index d4a9315c2..1746e6331 100644 --- a/src/modules/ui/CMakeLists.txt +++ b/src/modules/ui/CMakeLists.txt @@ -11,7 +11,7 @@ set(SRCS ) set(LIB ui) add_library(${LIB} ${SRCS}) -generate_shaders(${LIB} ui) +generate_shaders(${LIB} texture) target_link_libraries(${LIB} core io video turbobadger) set_target_properties(${LIB} PROPERTIES FOLDER ${LIB}) diff --git a/src/modules/ui/ui_renderer_gl.h b/src/modules/ui/ui_renderer_gl.h index 995f52d64..742a0e3fe 100644 --- a/src/modules/ui/ui_renderer_gl.h +++ b/src/modules/ui/ui_renderer_gl.h @@ -41,7 +41,7 @@ public: class UIRendererGL: public TBRendererBatcher { private: UIBitmapGL _white; - shader::UiShader _shader; + shader::TextureShader _shader; GLuint _buffer = 0u; GLuint _vao = 0u;