63 lines
1.9 KiB
C++
63 lines
1.9 KiB
C++
// D:\Dev\Mosis\MosisService\designer\src\desktop_platform.h
|
|
#pragma once
|
|
|
|
#include "platform.h"
|
|
#include "desktop_file_interface.h"
|
|
|
|
// Forward declare GLFW types to avoid including glfw3.h here
|
|
struct GLFWwindow;
|
|
|
|
namespace mosis {
|
|
|
|
class DesktopPlatform : public IPlatform {
|
|
public:
|
|
DesktopPlatform(GLFWwindow* window, uint32_t width, uint32_t height);
|
|
~DesktopPlatform() override = default;
|
|
|
|
// IPlatform interface
|
|
std::unique_ptr<IGraphicsContext> CreateGraphicsContext() override;
|
|
std::unique_ptr<IRenderTarget> CreateRenderTarget(uint32_t width, uint32_t height) override;
|
|
Rml::FileInterface& GetFileInterface() override;
|
|
void Log(const std::string& message) override;
|
|
bool PollEvents() override;
|
|
void SwapBuffers() override;
|
|
uint32_t GetWidth() const override { return m_width; }
|
|
uint32_t GetHeight() const override { return m_height; }
|
|
void SetResolution(uint32_t width, uint32_t height) override;
|
|
|
|
// Desktop-specific
|
|
void SetAssetsPath(const std::string& path);
|
|
GLFWwindow* GetWindow() const { return m_window; }
|
|
|
|
private:
|
|
GLFWwindow* m_window;
|
|
uint32_t m_width;
|
|
uint32_t m_height;
|
|
DesktopFileInterface m_file_interface;
|
|
};
|
|
|
|
// Desktop render target using FBO
|
|
class DesktopRenderTarget : public IRenderTarget {
|
|
public:
|
|
DesktopRenderTarget() = default;
|
|
~DesktopRenderTarget() override;
|
|
|
|
bool Create(uint32_t width, uint32_t height) override;
|
|
void Bind() override;
|
|
void Unbind() override;
|
|
void Destroy() override;
|
|
uint32_t GetFramebuffer() const override { return m_framebuffer; }
|
|
uint32_t GetTexture() const override { return m_texture; }
|
|
uint32_t GetWidth() const override { return m_width; }
|
|
uint32_t GetHeight() const override { return m_height; }
|
|
|
|
private:
|
|
uint32_t m_framebuffer = 0;
|
|
uint32_t m_texture = 0;
|
|
uint32_t m_depth_buffer = 0;
|
|
uint32_t m_width = 0;
|
|
uint32_t m_height = 0;
|
|
};
|
|
|
|
} // namespace mosis
|