diff --git a/Crafter.Graphics-Camera.cpp b/Crafter.Graphics-Camera.cpp index f3df871..33c6d70 100644 --- a/Crafter.Graphics-Camera.cpp +++ b/Crafter.Graphics-Camera.cpp @@ -3,20 +3,13 @@ module; #include #include "VulkanBuffer.h" #include -#include -#include module Crafter.Graphics; import Crafter.Math; -import Crafter.Event; using namespace Crafter; Camera::Camera(float fov, float aspectRatio, float near, float far) { - projection = MatrixRowMajor::Perspective(fov, aspectRatio, near, far); - view = MatrixRowMajor::Identity(); -} - -void Camera::Update() { - projectionView = projection*view; - onUpdate.Invoke(); + projection = Matrix::Projection(fov, aspectRatio, near, far); + view = Matrix::Idenity(); + projectionView = camera.matrices.perspective*camera.matrices.view; } \ No newline at end of file diff --git a/Crafter.Graphics-Camera.cppm b/Crafter.Graphics-Camera.cppm index ca1dbc9..06ccf6b 100644 --- a/Crafter.Graphics-Camera.cppm +++ b/Crafter.Graphics-Camera.cppm @@ -6,16 +6,13 @@ export module Crafter.Graphics:Camera; import :VulkanBuffer; import Crafter.Component; import Crafter.Math; -import Crafter.Event; namespace Crafter { export class Camera : public Component { public: - MatrixRowMajor projection; - MatrixRowMajor view; - MatrixRowMajor projectionView; - Event onUpdate; + Matrix projection; + Matrix view; + Matrix projectionView; Camera(float fov, float aspectRatio, float near, float far); - void Update(); }; } diff --git a/Crafter.Graphics-MeshShader.cppm b/Crafter.Graphics-MeshShader.cppm index 2005b4e..6c9b57d 100644 --- a/Crafter.Graphics-MeshShader.cppm +++ b/Crafter.Graphics-MeshShader.cppm @@ -11,24 +11,19 @@ import Crafter.Component; import :Mesh; import :Camera; import :VulkanPipeline; -import Crafter.Math; + namespace Crafter { export template - class MeshShader : public Component { + class MeshShader { public: - MatrixRowMajor transform; + //glm::mat4 transform; ComponentRefOwning> mesh; ComponentRefOwning camera; - Buffer> mvp; + Buffer mvp; std::uint32_t threadCount; - EventListener cameraUpdate; - MeshShader(Mesh* mesh, Camera* camera) : threadCount(std::ceil(static_cast(mesh->indexCount)/64/3)), mvp(VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT), mesh(mesh), camera(camera), cameraUpdate( - &camera->onUpdate, [this](){ - Update(); - } - ) { - transform = MatrixRowMajor::Identity(); + MeshShader(Mesh* mesh, Camera* camera) : threadCount(std::ceil(static_cast(mesh->indexCount)/64/3)), mvp(VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT), mesh(mesh), camera(camera) { + } void WriteDescriptors(DescriptorSet& set) { set.Write(0, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &mvp.descriptor); @@ -36,7 +31,7 @@ namespace Crafter { set.Write(0, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 2, &mesh.component->indicies.descriptor); } void Update() { - *mvp.value = camera.component->projectionView*transform; + //mvp.value[0] = camera.component->projectionView*transform; } }; } diff --git a/Crafter.Graphics-TextureShader.cppm b/Crafter.Graphics-TextureShader.cppm index 03f4c83..22b530f 100644 --- a/Crafter.Graphics-TextureShader.cppm +++ b/Crafter.Graphics-TextureShader.cppm @@ -4,6 +4,13 @@ module; #include #include #include +#define GLM_FORCE_RADIANS +#define GLM_FORCE_DEPTH_ZERO_TO_ONE +#define GLM_ENABLE_EXPERIMENTAL +#include +#include +#include +#include export module Crafter.Graphics:TextureShader; import Crafter.Component; diff --git a/Crafter.Graphics-VulkanTexture.cppm b/Crafter.Graphics-VulkanTexture.cppm index 0283d5c..d8ea3ed 100644 --- a/Crafter.Graphics-VulkanTexture.cppm +++ b/Crafter.Graphics-VulkanTexture.cppm @@ -4,6 +4,13 @@ module; #include #include #include +#define GLM_FORCE_RADIANS +#define GLM_FORCE_DEPTH_ZERO_TO_ONE +#define GLM_ENABLE_EXPERIMENTAL +#include +#include +#include +#include export module Crafter.Graphics:VulkanTexture; import Crafter.Component; diff --git a/Crafter.Graphics-WindowWayland.cpp b/Crafter.Graphics-WindowWayland.cpp index f247a75..daea4ae 100644 --- a/Crafter.Graphics-WindowWayland.cpp +++ b/Crafter.Graphics-WindowWayland.cpp @@ -155,11 +155,9 @@ void keyboard_key(void *data, wl_keyboard *keyboard, uint32_t serial, uint32_t t if(window->heldkeys[keypress]) { window->onKeyHold[keypress].Invoke(); } else{ - window->heldkeys[keypress] = true; window->onKeyDown[keypress].Invoke(); } } else{ - window->heldkeys[keypress] = false; window->onKeyUp[keypress].Invoke(); } @@ -198,7 +196,7 @@ void WindowWayland::seat_handle_capabilities(void* data, wl_seat* seat, uint32_t } if (capabilities & WL_SEAT_CAPABILITY_KEYBOARD) { wl_keyboard* keyboard = wl_seat_get_keyboard(seat); - wl_keyboard_add_listener(keyboard, &keyboard_listener, window); + wl_keyboard_add_listener(keyboard, &keyboard_listener, NULL); } } diff --git a/Crafter.Graphics-WindowWaylandVulkan.cpp b/Crafter.Graphics-WindowWaylandVulkan.cpp index 8c824ac..8177da0 100644 --- a/Crafter.Graphics-WindowWaylandVulkan.cpp +++ b/Crafter.Graphics-WindowWaylandVulkan.cpp @@ -439,7 +439,6 @@ void WindowWaylandVulkan::Start() { vkCmdSetScissor(drawCmdBuffers[currentBuffer], 0, 1, &scissor); onDraw.Invoke(drawCmdBuffers[currentBuffer]); - mouseDelta = {0, 0}; VulkanDevice::vkCmdEndRenderingKHRProc(drawCmdBuffers[currentBuffer]); diff --git a/main.cpp b/main.cpp index b89b802..3c75ade 100644 --- a/main.cpp +++ b/main.cpp @@ -2,10 +2,16 @@ #include #include #include +#define GLM_FORCE_RADIANS +#define GLM_FORCE_DEPTH_ZERO_TO_ONE +#define GLM_ENABLE_EXPERIMENTAL +#include +#include +#include +#include import Crafter.Graphics; import Crafter.Asset; import Crafter.Event; -import Crafter.Math; using namespace Crafter; typedef VulkanShader<"MeshShaderXYZUV.spirv", "main", VK_SHADER_STAGE_MESH_BIT_EXT, 3, {{{VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0}, {VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1}, {VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 2}}}> MeshVulkanShader; @@ -23,14 +29,14 @@ int main() { Asset asset; asset.LoadFull("cannon.cras"); - Camera camera(1.57079633, 16 / 9, 0.01, 512); - camera.Update(); + Camera camera; Mesh* mesh = Mesh::FromAssetUV(asset.entries[0].data.data()); DescriptorSet descriptors; Pipeline::GetDescriptorSet(descriptors); MeshShader meshShader(mesh, &camera); meshShader.WriteDescriptors(descriptors); + meshShader.transform = glm::mat4(1.0f); meshShader.Update(); Asset asset2;