Improvement to coordinate system

- Flip coordinate system for SwapChain passthrough
- Normalize MouseMoveEvent coordination
- Add RemoveSystem to Ecs
This commit is contained in:
Thraix
2023-05-23 13:02:21 +02:00
parent cd4abe6007
commit d817c3084d
12 changed files with 59 additions and 48 deletions
+5 -26
View File
@@ -19,13 +19,13 @@ namespace Copium
{
const std::vector<Vertex> vertices = {
Vertex{{-0.5f, 0.5f, -0.5f}, {1.0f, 0.0f, 0.0f}, {0.0f, 0.0f}},
Vertex{{ 0.5f, 0.5f, -0.5f}, {0.0f, 1.0f, 0.0f}, {1.0f, 0.0f}},
Vertex{{ 0.5f, 0.5f, 0.5f}, {0.0f, 0.0f, 1.0f}, {1.0f, 1.0f}},
Vertex{{-0.5f, 0.5f, 0.5f}, {1.0f, 1.0f, 1.0f}, {0.0f, 1.0f}},
Vertex{{ 0.5f, 0.5f, 0.5f}, {0.0f, 0.0f, 1.0f}, {1.0f, 1.0f}},
Vertex{{ 0.5f, 0.5f, -0.5f}, {0.0f, 1.0f, 0.0f}, {1.0f, 0.0f}},
Vertex{{-0.5f, 0.0f, -0.5f}, {1.0f, 0.0f, 0.0f}, {0.0f, 0.0f}},
Vertex{{ 0.5f, 0.0f, -0.5f}, {0.0f, 1.0f, 0.0f}, {1.0f, 0.0f}},
Vertex{{ 0.5f, 0.0f, 0.5f}, {0.0f, 0.0f, 1.0f}, {1.0f, 1.0f}},
Vertex{{-0.5f, 0.0f, 0.5f}, {1.0f, 1.0f, 1.0f}, {0.0f, 1.0f}},
Vertex{{ 0.5f, 0.0f, 0.5f}, {0.0f, 0.0f, 1.0f}, {1.0f, 1.0f}},
Vertex{{ 0.5f, 0.0f, -0.5f}, {0.0f, 1.0f, 0.0f}, {1.0f, 0.0f}},
};
const std::vector<uint16_t> indices = {
@@ -77,14 +77,6 @@ namespace Copium
Vulkan::GetSwapChain().SubmitToGraphicsQueue(*commandBuffer);
Vulkan::GetSwapChain().EndPresent();
if (timer.Elapsed() >= 1.0)
{
fps = frameCounter;
frameCounter = 0;
timer.Start(); // Not quite accurate since the elapsed time might me 1.1, then we lose 0.1 precision
}
frameCounter++;
return !glfwWindowShouldClose(Vulkan::GetWindow().GetWindow());
}
@@ -101,16 +93,6 @@ namespace Copium
return EventResult::Continue;
}
case EventType::MouseMove:
{
const MouseMoveEvent& mouseMoveEvent = static_cast<const MouseMoveEvent&>(event);
float aspect = Vulkan::GetSwapChain().GetExtent().width / (float)Vulkan::GetSwapChain().GetExtent().height;
mousePos = {(mouseMoveEvent.GetPos().x / Vulkan::GetSwapChain().GetExtent().width - 0.5) * 2.0 * aspect,
-(mouseMoveEvent.GetPos().y / Vulkan::GetSwapChain().GetExtent().height - 0.5) * 2.0};
return EventResult::Continue;
}
case EventType::MousePress:
{
const MousePressEvent& mousePressEvent = static_cast<const MousePressEvent&>(event);
@@ -231,11 +213,8 @@ namespace Copium
float aspect = fb.GetWidth() / (float)fb.GetHeight();
{
glm::mat4 projection = glm::perspective(glm::radians(45.0f), aspect, 0.1f, 10.0f);
projection[1][1] *= -1;
UniformBuffer& uniformBuffer = descriptorSet->GetUniformBuffer("ubo");
uniformBuffer.Set("projection", projection);
uniformBuffer.Set("projection", glm::perspective(glm::radians(45.0f), aspect, 0.1f, 10.0f));
uniformBuffer.Set("view", glm::lookAt(glm::vec3(2.0f, 2.0f, 2.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f)));
uniformBuffer.Set("model", glm::rotate(glm::mat4(1.0f), time * glm::radians(90.0f), glm::vec3(0.0f, 1.0f, 0.0f)));
uniformBuffer.Set("lightPos", (glm::vec3)(glm::rotate(glm::mat4{1.0f}, time * glm::radians(45.0f), glm::vec3(0, 1, 0)) * glm::vec4{0.3, 0.1, 0, 1}));
@@ -30,10 +30,6 @@ namespace Copium
std::unique_ptr<Mesh> meshPassthrough;
std::unique_ptr<CommandBuffer> commandBuffer;
glm::vec2 mousePos;
int fps;
int frameCounter;
public:
Application();
~Application();
-2
View File
@@ -52,8 +52,6 @@ namespace Copium
entityMouse.AddComponent<TextureC>(AssetRef{AssetManager::LoadAsset("fox2.meta")}, glm::vec2{0.0f, 0.0f}, glm::vec2{1.0f, 1.0f});
entityMouse.AddComponent<MouseFollowC>();
glm::vec2 pos = glm::vec2{-aspect + 0.01, 0.94};
Entity entityText = Entity::Create(ecs.get());
entityText.AddComponent<TransformC>(glm::vec2{-aspect + 0.01, 0.94}, glm::vec2{1.0});
entityText.AddComponent<TextC>(AssetRef{AssetManager::LoadAsset("font.meta")}, std::to_string(0) + " fps", 0.06f);
+15 -6
View File
@@ -14,6 +14,7 @@
namespace Copium
{
Window::Window(const std::string& windowName, int width, int height, WindowMode mode)
: width{width}, height{height}
{
InitializeWindow(windowName, width, height, mode);
InitializeSurface();
@@ -46,6 +47,8 @@ namespace Copium
GLFWmonitor* monitor = glfwGetPrimaryMonitor();
const GLFWvidmode* mode = glfwGetVideoMode(monitor);
window = glfwCreateWindow(mode->width, mode->height, windowName.c_str(), monitor, nullptr);
width = mode->width;
height = mode->height;
break;
}
case WindowMode::BorderlessWindowed:
@@ -54,6 +57,8 @@ namespace Copium
glfwWindowHint(GLFW_DECORATED, false);
window = glfwCreateWindow(mode->width, mode->height, windowName.c_str(), nullptr, nullptr);
width = mode->width;
height = mode->height;
break;
}
case WindowMode::Windowed:
@@ -85,11 +90,14 @@ namespace Copium
{
if (width == 0 || height == 0)
return;
Window* window = (Window*)glfwGetWindowUserPointer(glfwWindow);
window->width = width;
window->height = height;
Vulkan::GetSwapChain().ResizeFramebuffer();
EventDispatcher::QueueEvent(WindowResizeEvent{width, height});
}
void Window::KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods)
void Window::KeyCallback(GLFWwindow* glfwWindow, int key, int scancode, int action, int mods)
{
if (action == GLFW_PRESS)
EventDispatcher::QueueEvent(KeyPressEvent(key));
@@ -97,7 +105,7 @@ namespace Copium
EventDispatcher::QueueEvent(KeyReleaseEvent(key));
}
void Window::MouseButtonCallback(GLFWwindow* window, int button, int action, int mods)
void Window::MouseButtonCallback(GLFWwindow* glfwWindow, int button, int action, int mods)
{
if (action == GLFW_PRESS)
EventDispatcher::QueueEvent(MousePressEvent{button});
@@ -105,17 +113,18 @@ namespace Copium
EventDispatcher::QueueEvent(MouseReleaseEvent{button});
}
void Window::MouseMoveCallback(GLFWwindow* window, double xpos, double ypos)
void Window::MouseMoveCallback(GLFWwindow* glfwWindow, double xpos, double ypos)
{
EventDispatcher::QueueEvent(MouseMoveEvent{glm::vec2{xpos, ypos}}); // TODO: Convert to Vulkan coordinates
Window* window = (Window*)glfwGetWindowUserPointer(glfwWindow);
EventDispatcher::QueueEvent(MouseMoveEvent{glm::vec2{xpos / window->width * 2.0 - 1.0, -(ypos / window->height * 2.0 - 1.0)}});
}
void Window::WindowFocusCallback(GLFWwindow* window, int focused)
void Window::WindowFocusCallback(GLFWwindow* glfwWindow, int focused)
{
EventDispatcher::QueueEvent(WindowFocusEvent{focused == GLFW_TRUE});
}
void Window::MouseScrollCallback(GLFWwindow* window, double xoffset, double yoffset)
void Window::MouseScrollCallback(GLFWwindow* glfwWindow, double xoffset, double yoffset)
{
EventDispatcher::QueueEvent(MouseScrollEvent{(int)xoffset, (int)yoffset});
}
+3
View File
@@ -17,6 +17,9 @@ namespace Copium
GLFWwindow* window;
VkSurfaceKHR surface;
int width;
int height;
public:
Window(const std::string& windowName, int width, int height, WindowMode mode);
~Window();