Files
Seele/src/Engine/Graphics/Metal/Window.h
T

76 lines
2.7 KiB
C++
Raw Normal View History

2024-04-09 16:41:12 +02:00
#pragma once
#include "Graphics.h"
#include "Graphics/Window.h"
#include "Resources.h"
2024-04-10 08:43:56 +02:00
#include "Texture.h"
2024-04-09 16:41:12 +02:00
#define GLFW_INCLUDE_NONE
#include <GLFW/glfw3.h>
#define GLFW_EXPOSE_NATIVE_COCOA
#include <GLFW/glfw3native.h>
#include <Metal/Metal.hpp>
#include <QuartzCore/CAMetalLayer.hpp>
#include <QuartzCore/QuartzCore.hpp>
2024-04-15 13:48:34 +02:00
namespace Seele {
namespace Metal {
class Window : public Gfx::Window {
2024-04-09 16:41:12 +02:00
public:
2024-04-15 13:48:34 +02:00
Window(PGraphics graphics, const WindowCreateInfo& createInfo);
virtual ~Window();
virtual void pollInput() override;
virtual void beginFrame() override;
virtual void endFrame() override;
virtual Gfx::PTexture2D getBackBuffer() const override;
virtual void onWindowCloseEvent() override;
virtual void setKeyCallback(std::function<void(KeyCode, InputAction, KeyModifier)> callback) override;
virtual void setMouseMoveCallback(std::function<void(double, double)> callback) override;
virtual void setMouseButtonCallback(std::function<void(MouseButton, InputAction, KeyModifier)> callback) override;
virtual void setScrollCallback(std::function<void(double, double)> callback) override;
virtual void setFileCallback(std::function<void(int, const char**)> callback) override;
virtual void setCloseCallback(std::function<void()> callback) override;
virtual void setResizeCallback(std::function<void(uint32, uint32)> callback) override;
2024-04-09 16:41:12 +02:00
2024-04-15 13:48:34 +02:00
void keyPress(KeyCode code, InputAction action, KeyModifier modifier);
void mouseMove(double x, double y);
void mouseButton(MouseButton button, InputAction action, KeyModifier modifier);
void scroll(double x, double y);
void fileDrop(int num, const char** files);
void close();
void resize(int width, int height);
private:
void createBackBuffer();
PGraphics graphics;
WindowCreateInfo preferences;
GLFWwindow* windowHandle;
NSWindow* metalWindow;
CAMetalLayer* metalLayer;
CA::MetalDrawable* drawable;
OTexture2D backBuffer;
std::function<void(KeyCode, InputAction, KeyModifier)> keyCallback;
std::function<void(double, double)> mouseMoveCallback;
std::function<void(MouseButton, InputAction, KeyModifier)> mouseButtonCallback;
std::function<void(double, double)> scrollCallback;
std::function<void(int, const char**)> fileCallback;
std::function<void()> closeCallback;
std::function<void(uint32, uint32)> resizeCallback;
2024-04-09 16:41:12 +02:00
};
DEFINE_REF(Window);
2024-04-15 13:48:34 +02:00
class Viewport : public Gfx::Viewport {
2024-04-09 16:41:12 +02:00
public:
2024-04-15 13:48:34 +02:00
Viewport(PWindow owner, const ViewportCreateInfo& createInfo);
virtual ~Viewport();
constexpr MTL::Viewport getHandle() const { return viewport; }
virtual void resize(uint32 newX, uint32 newY);
virtual void move(uint32 newOffset, uint32 newOffsetY);
2024-04-09 16:41:12 +02:00
private:
2024-04-15 13:48:34 +02:00
MTL::Viewport viewport;
2024-04-09 16:41:12 +02:00
};
} // namespace Metal
} // namespace Seele