diff options
Diffstat (limited to 'ui')
-rw-r--r-- | ui/icon.cpp | 60 | ||||
-rw-r--r-- | ui/icon.h | 38 | ||||
-rw-r--r-- | ui/window.cpp | 166 | ||||
-rw-r--r-- | ui/window.h | 88 |
4 files changed, 176 insertions, 176 deletions
diff --git a/ui/icon.cpp b/ui/icon.cpp index ee88317..be1a63c 100644 --- a/ui/icon.cpp +++ b/ui/icon.cpp @@ -1,30 +1,30 @@ -#include "icon.h"
-#include "glArrays.h"
-#include <GL/glew.h>
-#include <gfx/image.h>
-#include <resource.h>
-#include <stb/stb_image.h>
-
-Icon::Icon(const std::filesystem::path & fileName) : Icon {Image {Resource::mapPath(fileName).c_str(), STBI_rgb_alpha}}
-{
-}
-
-Icon::Icon(const Image & tex) : size {tex.width, tex.height}
-{
- glBindTexture(GL_TEXTURE_2D, m_texture);
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, static_cast<GLsizei>(tex.width), static_cast<GLsizei>(tex.height), 0,
- GL_RGBA, GL_UNSIGNED_BYTE, tex.data.data());
-}
-
-void
-Icon::Bind() const
-{
- glActiveTexture(GL_TEXTURE0);
- glBindTexture(GL_TEXTURE_2D, m_texture);
-}
+#include "icon.h" +#include "glArrays.h" +#include <GL/glew.h> +#include <gfx/image.h> +#include <resource.h> +#include <stb/stb_image.h> + +Icon::Icon(const std::filesystem::path & fileName) : Icon {Image {Resource::mapPath(fileName).c_str(), STBI_rgb_alpha}} +{ +} + +Icon::Icon(const Image & tex) : size {tex.width, tex.height} +{ + glBindTexture(GL_TEXTURE_2D, m_texture); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, static_cast<GLsizei>(tex.width), static_cast<GLsizei>(tex.height), 0, + GL_RGBA, GL_UNSIGNED_BYTE, tex.data.data()); +} + +void +Icon::Bind() const +{ + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, m_texture); +} @@ -1,19 +1,19 @@ -#pragma once
-
-#include <filesystem>
-#include <glArrays.h>
-#include <glm/glm.hpp>
-
-class Image;
-
-class Icon {
-public:
- explicit Icon(const std::filesystem::path & fileName);
- explicit Icon(const Image & image);
-
- void Bind() const;
- const glm::vec2 size;
-
-private:
- glTexture m_texture;
-};
+#pragma once + +#include <filesystem> +#include <glArrays.h> +#include <glm/glm.hpp> + +class Image; + +class Icon { +public: + explicit Icon(const std::filesystem::path & fileName); + explicit Icon(const Image & image); + + void Bind() const; + const glm::vec2 size; + +private: + glTexture m_texture; +}; diff --git a/ui/window.cpp b/ui/window.cpp index 5930292..ad071bb 100644 --- a/ui/window.cpp +++ b/ui/window.cpp @@ -1,83 +1,83 @@ -#include "window.h"
-#include "uiComponent.h"
-#include "worldOverlay.h"
-#include <GL/glew.h>
-#include <glm/glm.hpp>
-#include <stdexcept>
-#include <tuple>
-#include <type_traits>
-
-Window::GlewInitHelper::GlewInitHelper()
-{
- [[maybe_unused]] static auto init = []() {
- if (const auto r = glewInit(); r != GLEW_OK) {
- throw std::runtime_error {reinterpret_cast<const char *>(glewGetErrorString(r))};
- }
- else {
- return r;
- }
- }();
-}
-
-Window::Window(size_t width, size_t height, const std::string & title, Uint32 flags) :
- size {static_cast<int>(width), static_cast<int>(height)}, m_window {title.c_str(),
- static_cast<int>(SDL_WINDOWPOS_CENTERED),
- static_cast<int>(SDL_WINDOWPOS_CENTERED), size.x,
- size.y, flags},
- glContext {m_window}, uiShader {width, height}
-{
-}
-
-void
-Window::clear(float r, float g, float b, float a) const
-{
- glClearColor(r, g, b, a);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-}
-
-void
-Window::swapBuffers() const
-{
- SDL_GL_SwapWindow(m_window);
-}
-
-bool
-Window::handleInput(const SDL_Event & e)
-{
- if (SDL_GetWindowID(m_window) == e.window.windowID) {
- SDL_Event eAdjusted {e};
- switch (e.type) {
- // SDL and OpenGL have coordinates that are vertically opposed.
- case SDL_MOUSEBUTTONDOWN:
- case SDL_MOUSEBUTTONUP:
- eAdjusted.button.y = size.y - e.button.y;
- break;
- case SDL_MOUSEMOTION:
- eAdjusted.motion.y = size.y - e.motion.y;
- break;
- }
- uiComponents.rapplyOne(&UIComponent::handleInput, eAdjusted, UIComponent::Position {{}, size});
- return true;
- }
- return false;
-}
-
-void
-Window::refresh() const
-{
- SDL_GL_MakeCurrent(m_window, glContext);
- clear(0.0F, 0.0F, 0.0F, 1.0F);
-
- render();
-
- swapBuffers();
-}
-
-void
-Window::render() const
-{
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glDisable(GL_DEPTH_TEST);
- uiComponents.apply(&UIComponent::render, uiShader, UIComponent::Position {});
-}
+#include "window.h" +#include "uiComponent.h" +#include "worldOverlay.h" +#include <GL/glew.h> +#include <glm/glm.hpp> +#include <stdexcept> +#include <tuple> +#include <type_traits> + +Window::GlewInitHelper::GlewInitHelper() +{ + [[maybe_unused]] static auto init = []() { + if (const auto r = glewInit(); r != GLEW_OK) { + throw std::runtime_error {reinterpret_cast<const char *>(glewGetErrorString(r))}; + } + else { + return r; + } + }(); +} + +Window::Window(size_t width, size_t height, const std::string & title, Uint32 flags) : + size {static_cast<int>(width), static_cast<int>(height)}, m_window {title.c_str(), + static_cast<int>(SDL_WINDOWPOS_CENTERED), + static_cast<int>(SDL_WINDOWPOS_CENTERED), size.x, + size.y, flags}, + glContext {m_window}, uiShader {width, height} +{ +} + +void +Window::clear(float r, float g, float b, float a) const +{ + glClearColor(r, g, b, a); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +} + +void +Window::swapBuffers() const +{ + SDL_GL_SwapWindow(m_window); +} + +bool +Window::handleInput(const SDL_Event & e) +{ + if (SDL_GetWindowID(m_window) == e.window.windowID) { + SDL_Event eAdjusted {e}; + switch (e.type) { + // SDL and OpenGL have coordinates that are vertically opposed. + case SDL_MOUSEBUTTONDOWN: + case SDL_MOUSEBUTTONUP: + eAdjusted.button.y = size.y - e.button.y; + break; + case SDL_MOUSEMOTION: + eAdjusted.motion.y = size.y - e.motion.y; + break; + } + uiComponents.rapplyOne(&UIComponent::handleInput, eAdjusted, UIComponent::Position {{}, size}); + return true; + } + return false; +} + +void +Window::refresh() const +{ + SDL_GL_MakeCurrent(m_window, glContext); + clear(0.0F, 0.0F, 0.0F, 1.0F); + + render(); + + swapBuffers(); +} + +void +Window::render() const +{ + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glDisable(GL_DEPTH_TEST); + uiComponents.apply(&UIComponent::render, uiShader, UIComponent::Position {}); +} diff --git a/ui/window.h b/ui/window.h index cb0118a..8b7d870 100644 --- a/ui/window.h +++ b/ui/window.h @@ -1,44 +1,44 @@ -#pragma once
-
-#include "chronology.hpp"
-#include "collection.hpp"
-#include "gfx/gl/uiShader.h"
-#include "ptr.hpp"
-#include "uiComponent.h" // IWYU pragma: keep
-#include <SDL2/SDL.h>
-#include <cstddef>
-#include <special_members.hpp>
-#include <string>
-
-using SDL_WindowPtr = wrapped_ptrt<SDL_Window, SDL_CreateWindow, SDL_DestroyWindow>;
-using GL_Context = std::remove_pointer_t<SDL_GLContext>;
-using SDL_GLContextPtr = wrapped_ptrt<GL_Context, SDL_GL_CreateContext, SDL_GL_DeleteContext>;
-
-class Window {
-public:
- Window(size_t width, size_t height, const std::string & title, Uint32 flags);
- virtual ~Window() = default;
-
- NO_COPY(Window);
- NO_MOVE(Window);
-
- virtual void tick(TickDuration elapsed) = 0;
- void refresh() const;
- bool handleInput(const SDL_Event & e);
-
- void clear(float r, float g, float b, float a) const;
- void swapBuffers() const;
-
-protected:
- virtual void render() const;
- struct GlewInitHelper {
- GlewInitHelper();
- };
-
- const glm::ivec2 size;
- SDL_WindowPtr m_window;
- SDL_GLContextPtr glContext;
- GlewInitHelper glewinithelper;
- Collection<UIComponent> uiComponents;
- UIShader uiShader;
-};
+#pragma once + +#include "chronology.hpp" +#include "collection.hpp" +#include "gfx/gl/uiShader.h" +#include "ptr.hpp" +#include "uiComponent.h" // IWYU pragma: keep +#include <SDL2/SDL.h> +#include <cstddef> +#include <special_members.hpp> +#include <string> + +using SDL_WindowPtr = wrapped_ptrt<SDL_Window, SDL_CreateWindow, SDL_DestroyWindow>; +using GL_Context = std::remove_pointer_t<SDL_GLContext>; +using SDL_GLContextPtr = wrapped_ptrt<GL_Context, SDL_GL_CreateContext, SDL_GL_DeleteContext>; + +class Window { +public: + Window(size_t width, size_t height, const std::string & title, Uint32 flags); + virtual ~Window() = default; + + NO_COPY(Window); + NO_MOVE(Window); + + virtual void tick(TickDuration elapsed) = 0; + void refresh() const; + bool handleInput(const SDL_Event & e); + + void clear(float r, float g, float b, float a) const; + void swapBuffers() const; + +protected: + virtual void render() const; + struct GlewInitHelper { + GlewInitHelper(); + }; + + const glm::ivec2 size; + SDL_WindowPtr m_window; + SDL_GLContextPtr glContext; + GlewInitHelper glewinithelper; + Collection<UIComponent> uiComponents; + UIShader uiShader; +}; |