From 6d353814fcdedccc2bbf44e3c012f2eca3666339 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Con=C3=A1l?= Date: Tue, 30 Jan 2024 13:56:07 -0500 Subject: [PATCH] Cursors now works! --- Input/Input.cpp | 26 ++++++++++++++++++++++++++ Input/Input.hpp | 5 +++++ Renderer/CommandBuffer.hpp | 1 + Renderer/Renderer.cpp | 2 +- UI/UI.cpp | 4 ++-- assets/shaders/basic.frag | 2 +- assets/shaders/basic.frag.spv | Bin 964 -> 1104 bytes pléascach.cpp | 1 + 8 files changed, 37 insertions(+), 4 deletions(-) diff --git a/Input/Input.cpp b/Input/Input.cpp index 4310043..868a8d8 100644 --- a/Input/Input.cpp +++ b/Input/Input.cpp @@ -9,6 +9,8 @@ #include +#include + bool Input::shouldClose() { return glfwWindowShouldClose(in); } @@ -65,6 +67,8 @@ Input::Input(INPUT_PTR in) : in(in) { } }); }); + + glfwSetInputMode(in, GLFW_CURSOR, GLFW_CURSOR_DISABLED); } void Input::handleMovementKeys(Renderer& ren) { @@ -108,6 +112,28 @@ void Input::handleMovementKeys(Renderer& ren) { ren.cam.pos += right * 0.1f * speed; } + if(glfwGetKey(in, GLFW_KEY_SPACE)) { + ren.cam.pos.y += 0.1; + } + + if(glfwGetKey(in, GLFW_KEY_LEFT_CONTROL)) { + ren.cam.pos.y -= 0.1; + } + ren.cam.theta = glm::clamp(ren.cam.theta, 0.01f, glm::pi() - 0.01f); ren.cam.phi = glm::mod(ren.cam.phi, glm::two_pi()); } + + +void Input::handleCursorMovement(Renderer& ren, double x, double y) { + int rel_mouse_x = static_cast(x) - last_mouse.x; + int rel_mouse_y = static_cast(y) - last_mouse.y; + + ren.cam.phi += rel_mouse_x / 100.0; + ren.cam.theta += rel_mouse_y / 100.0; + + last_mouse = glm::vec2(x,y); + + ren.cam.theta = glm::clamp(ren.cam.theta, 0.01f, glm::pi() - 0.01f); + ren.cam.phi = glm::mod(ren.cam.phi, glm::two_pi()); +} \ No newline at end of file diff --git a/Input/Input.hpp b/Input/Input.hpp index 273186c..c57047a 100644 --- a/Input/Input.hpp +++ b/Input/Input.hpp @@ -7,6 +7,8 @@ #include #include +#include + enum InputModifierBit { eNONE = 0x00, eSHIFT = 0x01, @@ -61,11 +63,14 @@ struct Input { INPUT_PTR in; + glm::vec2 last_mouse = glm::vec2(0.0f, 0.0f); + void poll(); std::queue queue; void handleMovementKeys(Renderer& ren); + void handleCursorMovement(Renderer& ren, double x, double y); bool shouldClose(); }; \ No newline at end of file diff --git a/Renderer/CommandBuffer.hpp b/Renderer/CommandBuffer.hpp index 1106546..b22b6fe 100644 --- a/Renderer/CommandBuffer.hpp +++ b/Renderer/CommandBuffer.hpp @@ -5,6 +5,7 @@ #include +#include struct Buffer; struct Image; diff --git a/Renderer/Renderer.cpp b/Renderer/Renderer.cpp index 73ba52f..9eab03b 100644 --- a/Renderer/Renderer.cpp +++ b/Renderer/Renderer.cpp @@ -191,7 +191,7 @@ Renderer::Renderer(Window& win) : win(win) { /* initialize models */ // models.push_back(std::make_shared(phys_dev, dev, "assets/models/dragon.gltf")); - models.push_back(std::make_shared(phys_dev, dev, "assets/models/monk.gltf")); + models.push_back(std::make_shared(phys_dev, dev, "assets/models/dragon.gltf")); Log::debug("#%zu vertex indices\n", models[0]->indices.size()); diff --git a/UI/UI.cpp b/UI/UI.cpp index bd3d4de..c8d088f 100644 --- a/UI/UI.cpp +++ b/UI/UI.cpp @@ -11,7 +11,7 @@ #include -UI::UI(Renderer* ren) : dev(ren->dev), info{ .cam = ren->cam } { +UI::UI(Renderer* ren) : info{ .cam = ren->cam }, dev(ren->dev) { IMGUI_CHECKVERSION(); ImGui::CreateContext(); @@ -71,7 +71,7 @@ UI::UI(Renderer* ren) : dev(ren->dev), info{ .cam = ren->cam } { .pCommandBuffers = &imgui_cmd_buffer.command_buffer, }, imgui_fence); - ren->dev.waitForFences(imgui_fence, vk::True, UINT64_MAX); + (void)ren->dev.waitForFences(imgui_fence, vk::True, UINT64_MAX); ren->dev.destroyFence(imgui_fence); diff --git a/assets/shaders/basic.frag b/assets/shaders/basic.frag index 21e5d2c..f5f1c3b 100644 --- a/assets/shaders/basic.frag +++ b/assets/shaders/basic.frag @@ -13,6 +13,6 @@ layout (set = 0, binding = 1) uniform sampler2D tex; void main() { //FragColor = vec4(1.0); - FragColor = texture(tex, texCoord); + FragColor = texture(tex, texCoord) * vec4(norm, 1.0); // FragColor = vec4(texCoord, 0.0, 1.0); } \ No newline at end of file diff --git a/assets/shaders/basic.frag.spv b/assets/shaders/basic.frag.spv index e1c505fe8942fa4bf5472c38f6a50aa0cc302b6c..671f15ac01509b6ff61400855c18936b825075da 100644 GIT binary patch delta 405 zcmX@Yeu0CRnMs+Qfq{{Mn}L@>X(KN;qoq6p1A}j3Nl|8UYB2)?0|Ofa3j;_D#Lg`% zU|?fl1@jph7#K=2b5lX$tPIQyijxBwqg7!lSs54@JfJE;DwIJ4Ol|j^OFfcHH^n=ucafF?hnMs+Qfq{{Mn}L@>dLu74qoo7`1A}j3Nl|8UYB2)?0|Ofa3j;_D#Lg`% zU|?fl1@jph7#K=2b5lX$tPIQyQj-H2qg7!lSs54@JfJE;DwIJ4Ol7#QTB&I5_D xF)%PFFt9L4GB7ZJi~(6;4dqKs&SVZ3v14Fn;ACK65N2Rt_{+e^V8Ou1008;(6(9fr diff --git a/pléascach.cpp b/pléascach.cpp index d58ffa1..12568a1 100644 --- a/pléascach.cpp +++ b/pléascach.cpp @@ -36,6 +36,7 @@ int main(int argc, char* argv[]) { win.close(); break; case InputEvent::Tag::eCURSOR: + in->handleCursorMovement(ren, event.pos.x, event.pos.y); break; case InputEvent::Tag::eBUTTON: break;