From 91a0c92fe7ddc7e5c766029a4176e1c27fb2cccc Mon Sep 17 00:00:00 2001 From: Light Date: Mon, 5 Jul 2021 14:36:36 +0430 Subject: [PATCH] - ConstantBuffers - Added ConstantBuffers - Updated GLAD to have GL_ARB_shading_language_420pack extensions --- Dependencies/GLAD/include/glad/glad.h | 12 ++++--- Dependencies/GLAD/src/glad.c | 11 ++++--- Engine/res/Shaders/QuadShader.h | 7 ++-- Engine/res/Shaders/TextureShader.h | 15 +++++++-- Engine/src/Engine/Camera/Camera.cpp | 2 +- Engine/src/Engine/Graphics/Buffers.cpp | 17 ++++++++++ Engine/src/Engine/Graphics/Buffers.h | 21 ++++++++++++ Engine/src/Engine/Graphics/Renderer.cpp | 19 +++++++++-- Engine/src/Engine/Graphics/Renderer.h | 3 ++ .../RendererPrograms/QuadRendererProgram.cpp | 6 +++- .../RendererPrograms/QuadRendererProgram.h | 2 ++ .../RendererPrograms/RendererProgram.h | 3 ++ .../TextureRendererProgram.cpp | 6 +++- .../RendererPrograms/TextureRendererProgram.h | 2 ++ .../GraphicsAPI/DirectX/dxBuffers.cpp | 32 +++++++++++++++++++ .../Platform/GraphicsAPI/DirectX/dxBuffers.h | 20 ++++++++++++ .../GraphicsAPI/DirectX/dxVertexLayout.cpp | 2 +- .../Platform/GraphicsAPI/OpenGL/glBuffers.cpp | 31 ++++++++++++++++++ .../Platform/GraphicsAPI/OpenGL/glBuffers.h | 15 +++++++++ .../GraphicsAPI/OpenGL/glGraphicsContext.cpp | 2 ++ Sandbox/src/SandboxLayer.h | 9 +++--- 21 files changed, 211 insertions(+), 26 deletions(-) diff --git a/Dependencies/GLAD/include/glad/glad.h b/Dependencies/GLAD/include/glad/glad.h index 75808aa..2e732bd 100644 --- a/Dependencies/GLAD/include/glad/glad.h +++ b/Dependencies/GLAD/include/glad/glad.h @@ -1,22 +1,22 @@ /* - OpenGL loader generated by glad 0.1.34 on Tue May 25 14:15:38 2021. + OpenGL loader generated by glad 0.1.34 on Sun Jul 4 22:51:05 2021. Language/Generator: C/C++ Specification: gl APIs: gl=4.6 Profile: core Extensions: - + GL_ARB_shading_language_420pack Loader: True Local files: False Omit khrplatform: False Reproducible: False Commandline: - --profile="core" --api="gl=4.6" --generator="c" --spec="gl" --extensions="" + --profile="core" --api="gl=4.6" --generator="c" --spec="gl" --extensions="GL_ARB_shading_language_420pack" Online: - https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D4.6 + https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D4.6&extensions=GL_ARB_shading_language_420pack */ @@ -3686,6 +3686,10 @@ typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPPROC)(GLfloat factor, GLfloat uni GLAPI PFNGLPOLYGONOFFSETCLAMPPROC glad_glPolygonOffsetClamp; #define glPolygonOffsetClamp glad_glPolygonOffsetClamp #endif +#ifndef GL_ARB_shading_language_420pack +#define GL_ARB_shading_language_420pack 1 +GLAPI int GLAD_GL_ARB_shading_language_420pack; +#endif #ifdef __cplusplus } diff --git a/Dependencies/GLAD/src/glad.c b/Dependencies/GLAD/src/glad.c index f25bd5d..a1f3395 100644 --- a/Dependencies/GLAD/src/glad.c +++ b/Dependencies/GLAD/src/glad.c @@ -1,22 +1,22 @@ /* - OpenGL loader generated by glad 0.1.34 on Tue May 25 14:15:38 2021. + OpenGL loader generated by glad 0.1.34 on Sun Jul 4 22:51:05 2021. Language/Generator: C/C++ Specification: gl APIs: gl=4.6 Profile: core Extensions: - + GL_ARB_shading_language_420pack Loader: True Local files: False Omit khrplatform: False Reproducible: False Commandline: - --profile="core" --api="gl=4.6" --generator="c" --spec="gl" --extensions="" + --profile="core" --api="gl=4.6" --generator="c" --spec="gl" --extensions="GL_ARB_shading_language_420pack" Online: - https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D4.6 + https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D4.6&extensions=GL_ARB_shading_language_420pack */ #include @@ -973,6 +973,7 @@ PFNGLVIEWPORTARRAYVPROC glad_glViewportArrayv = NULL; PFNGLVIEWPORTINDEXEDFPROC glad_glViewportIndexedf = NULL; PFNGLVIEWPORTINDEXEDFVPROC glad_glViewportIndexedfv = NULL; PFNGLWAITSYNCPROC glad_glWaitSync = NULL; +int GLAD_GL_ARB_shading_language_420pack = 0; static void load_GL_VERSION_1_0(GLADloadproc load) { if(!GLAD_GL_VERSION_1_0) return; glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace"); @@ -1735,7 +1736,7 @@ static void load_GL_VERSION_4_6(GLADloadproc load) { } static int find_extensionsGL(void) { if (!get_exts()) return 0; - (void)&has_ext; + GLAD_GL_ARB_shading_language_420pack = has_ext("GL_ARB_shading_language_420pack"); free_exts(); return 1; } diff --git a/Engine/res/Shaders/QuadShader.h b/Engine/res/Shaders/QuadShader.h index 282427a..7e60105 100644 --- a/Engine/res/Shaders/QuadShader.h +++ b/Engine/res/Shaders/QuadShader.h @@ -6,13 +6,16 @@ R"( layout(location = 0) in vec3 a_Position; layout(location = 1) in vec4 a_Color; -uniform mat4 u_ViewProjection; +layout(std140, binding = 0) uniform ub_ViewProjection +{ + mat4 viewProjection; +}; out vec4 vso_FragmentColor; void main() { - gl_Position = u_ViewProjection * vec4(a_Position, 1.0); + gl_Position = viewProjection * vec4(a_Position, 1.0); vso_FragmentColor = a_Color; } -GLSL diff --git a/Engine/res/Shaders/TextureShader.h b/Engine/res/Shaders/TextureShader.h index cb4d8d5..2745343 100644 --- a/Engine/res/Shaders/TextureShader.h +++ b/Engine/res/Shaders/TextureShader.h @@ -6,7 +6,10 @@ R"( layout(location = 0) in vec3 a_Position; layout(location = 1) in vec2 a_TexCoord; -uniform mat4 u_ViewProjection; +layout(std140, binding = 0) uniform ub_ViewProjection +{ + mat4 u_ViewProjection; +}; out vec2 vso_TexCoord; @@ -25,10 +28,16 @@ struct VertexOut float4 Position : SV_Position; }; -VertexOut main(float3 InPosition : POSITION, float2 InTexChoord : TEXCHOORD) +cbuffer cb_ViewProjection : register(b0) +{ + row_major matrix viewProjection; +} + + +VertexOut main(float3 InPosition : POSITION, float2 InTexChoord : TEXCOORD) { VertexOut vso; - vso.Position = float4(InPosition, 1.0); + vso.Position = mul(float4(InPosition, 1.0), viewProjection); vso.TexChoord = InTexChoord; return vso; diff --git a/Engine/src/Engine/Camera/Camera.cpp b/Engine/src/Engine/Camera/Camera.cpp index 6cc4399..32acfd5 100644 --- a/Engine/src/Engine/Camera/Camera.cpp +++ b/Engine/src/Engine/Camera/Camera.cpp @@ -13,7 +13,7 @@ namespace Light { void Camera::CalculateView() { - m_View = glm::lookAt(glm::vec3(m_Position, -100.0f), glm::vec3(m_Position, 0.0f), m_Up); + m_View = glm::lookAt(glm::vec3(m_Position, 100.0f), glm::vec3(m_Position, 0.0f), m_Up); } void Camera::CalculateProjection() diff --git a/Engine/src/Engine/Graphics/Buffers.cpp b/Engine/src/Engine/Graphics/Buffers.cpp index da60a87..b6017bd 100644 --- a/Engine/src/Engine/Graphics/Buffers.cpp +++ b/Engine/src/Engine/Graphics/Buffers.cpp @@ -13,6 +13,23 @@ namespace Light { + //* CONSTANT_BUFFER *// + ConstantBuffer* ConstantBuffer::Create(ConstantBufferIndex index, unsigned int size, std::shared_ptr sharedContext) + { + switch (GraphicsContext::GetGraphicsAPI()) + { + case GraphicsAPI::OpenGL: + return new glConstantBuffer(index, size); + + case GraphicsAPI::DirectX: LT_WIN( + return new dxConstantBuffer(index, size, std::static_pointer_cast(sharedContext));) + + default: + LT_ENGINE_ASSERT(false, "VertexBuffer::Create: invalid/unsupported 'GraphicsAPI' {}", GraphicsContext::GetGraphicsAPI()); + return nullptr; + } + } + //* VERTEX_BUFFER *// VertexBuffer* VertexBuffer::Create(float* vertices, unsigned int stride, unsigned int count, std::shared_ptr sharedContext) { diff --git a/Engine/src/Engine/Graphics/Buffers.h b/Engine/src/Engine/Graphics/Buffers.h index 74f3dcf..8f56f1f 100644 --- a/Engine/src/Engine/Graphics/Buffers.h +++ b/Engine/src/Engine/Graphics/Buffers.h @@ -6,12 +6,31 @@ namespace Light { class SharedContext; + enum ConstantBufferIndex + { + ViewProjection = 0u + }; + + //* CONSTANT_BUFFER *// + class ConstantBuffer + { + public: + static ConstantBuffer* Create(ConstantBufferIndex index, unsigned int size, std::shared_ptr sharedContext); + + virtual void Bind() = 0; + + virtual void* Map() = 0; + virtual void UnMap() = 0; + }; + //* VERTEX_BUFFER *// class VertexBuffer { public: static VertexBuffer* Create(float* vertices, unsigned int stride, unsigned int count, std::shared_ptr sharedContext); + virtual ~VertexBuffer() = default; + virtual void* Map() = 0; virtual void UnMap() = 0; @@ -28,6 +47,8 @@ namespace Light { public: static IndexBuffer* Create(unsigned int* indices, unsigned int count, std::shared_ptr sharedContext); + virtual ~IndexBuffer() = default; + virtual void Bind() = 0; virtual void UnBind() = 0; diff --git a/Engine/src/Engine/Graphics/Renderer.cpp b/Engine/src/Engine/Graphics/Renderer.cpp index 4daddfa..5354a4d 100644 --- a/Engine/src/Engine/Graphics/Renderer.cpp +++ b/Engine/src/Engine/Graphics/Renderer.cpp @@ -3,6 +3,13 @@ #include "RenderCommand.h" #include "Texture.h" +#include "Buffers.h" + +#include "Camera/Camera.h" + +#include +#include +#include namespace Light { @@ -16,6 +23,8 @@ namespace Light { s_Context = this; m_RenderCommand = std::unique_ptr(RenderCommand::Create(windowHandle, sharedContext)); + + m_ViewProjectionBuffer = std::unique_ptr(ConstantBuffer::Create(ConstantBufferIndex::ViewProjection, sizeof(glm::mat4), sharedContext)); } Renderer* Renderer::Create(GLFWwindow* windowHandle, std::shared_ptr sharedContext) @@ -106,15 +115,19 @@ namespace Light { void Renderer::BeginSceneImpl(const Camera& camera) { + glm::mat4* map = (glm::mat4*)m_ViewProjectionBuffer->Map(); + map[0] = camera.GetProjection() * camera.GetView(); + m_ViewProjectionBuffer->UnMap(); + m_QuadRenderer.Map(); m_TextureRenderer.Map(); - - m_QuadRenderer.SetCamera(camera); - m_TextureRenderer.SetCamera(camera); } void Renderer::EndSceneImpl() { + m_QuadRenderer.UnMap(); + m_TextureRenderer.UnMap(); + //** QUAD_RENDERER **// if (m_QuadRenderer.GetQuadCount()) { diff --git a/Engine/src/Engine/Graphics/Renderer.h b/Engine/src/Engine/Graphics/Renderer.h index d81e669..c541e2a 100644 --- a/Engine/src/Engine/Graphics/Renderer.h +++ b/Engine/src/Engine/Graphics/Renderer.h @@ -2,6 +2,8 @@ #include "Base.h" +#include "Buffers.h" + #include "RendererPrograms/QuadRendererProgram.h" #include "RendererPrograms/TextureRendererProgram.h" @@ -28,6 +30,7 @@ namespace Light { TextureRendererProgram m_TextureRenderer; std::unique_ptr m_RenderCommand; + std::unique_ptr m_ViewProjectionBuffer; public: static Renderer* Create(GLFWwindow* windowHandle, std::shared_ptr sharedContext); diff --git a/Engine/src/Engine/Graphics/RendererPrograms/QuadRendererProgram.cpp b/Engine/src/Engine/Graphics/RendererPrograms/QuadRendererProgram.cpp index b907e1a..ff45447 100644 --- a/Engine/src/Engine/Graphics/RendererPrograms/QuadRendererProgram.cpp +++ b/Engine/src/Engine/Graphics/RendererPrograms/QuadRendererProgram.cpp @@ -51,9 +51,13 @@ namespace Light { m_MapEnd = m_MapCurrent + m_MaxVertices; } - void QuadRendererProgram::Bind() + void QuadRendererProgram::UnMap() { m_VertexBuffer->UnMap(); + } + + void QuadRendererProgram::Bind() + { m_Shader->Bind(); m_VertexLayout->Bind(); m_VertexBuffer->Bind(); diff --git a/Engine/src/Engine/Graphics/RendererPrograms/QuadRendererProgram.h b/Engine/src/Engine/Graphics/RendererPrograms/QuadRendererProgram.h index dd7718d..d398625 100644 --- a/Engine/src/Engine/Graphics/RendererPrograms/QuadRendererProgram.h +++ b/Engine/src/Engine/Graphics/RendererPrograms/QuadRendererProgram.h @@ -45,6 +45,8 @@ namespace Light { void SetCamera(const Camera& camera) override; void Map() override; + void UnMap() override; + void Bind() override; inline QuadVertexData* GetMapCurrent() { return m_MapCurrent; } diff --git a/Engine/src/Engine/Graphics/RendererPrograms/RendererProgram.h b/Engine/src/Engine/Graphics/RendererPrograms/RendererProgram.h index f8b3b42..c716b00 100644 --- a/Engine/src/Engine/Graphics/RendererPrograms/RendererProgram.h +++ b/Engine/src/Engine/Graphics/RendererPrograms/RendererProgram.h @@ -10,7 +10,10 @@ namespace Light { { virtual void SetCamera(const Camera& camera) = 0; + virtual void Map() = 0; + virtual void UnMap() = 0; + virtual void Bind() = 0; }; diff --git a/Engine/src/Engine/Graphics/RendererPrograms/TextureRendererProgram.cpp b/Engine/src/Engine/Graphics/RendererPrograms/TextureRendererProgram.cpp index 6e2a760..3abd820 100644 --- a/Engine/src/Engine/Graphics/RendererPrograms/TextureRendererProgram.cpp +++ b/Engine/src/Engine/Graphics/RendererPrograms/TextureRendererProgram.cpp @@ -51,9 +51,13 @@ namespace Light { m_MapEnd = m_MapCurrent + m_MaxVertices; } - void TextureRendererProgram::Bind() + void TextureRendererProgram::UnMap() { m_VertexBuffer->UnMap(); + } + + void TextureRendererProgram::Bind() + { m_Shader->Bind(); m_VertexLayout->Bind(); m_VertexBuffer->Bind(); diff --git a/Engine/src/Engine/Graphics/RendererPrograms/TextureRendererProgram.h b/Engine/src/Engine/Graphics/RendererPrograms/TextureRendererProgram.h index b971cca..004b732 100644 --- a/Engine/src/Engine/Graphics/RendererPrograms/TextureRendererProgram.h +++ b/Engine/src/Engine/Graphics/RendererPrograms/TextureRendererProgram.h @@ -45,6 +45,8 @@ namespace Light { void SetCamera(const Camera& camera) override; void Map() override; + void UnMap() override; + void Bind() override; inline TextureVertexData* GetMapCurrent() { return m_MapCurrent; } diff --git a/Engine/src/Platform/GraphicsAPI/DirectX/dxBuffers.cpp b/Engine/src/Platform/GraphicsAPI/DirectX/dxBuffers.cpp index 4de5861..34f5686 100644 --- a/Engine/src/Platform/GraphicsAPI/DirectX/dxBuffers.cpp +++ b/Engine/src/Platform/GraphicsAPI/DirectX/dxBuffers.cpp @@ -5,6 +5,38 @@ namespace Light { + dxConstantBuffer::dxConstantBuffer(ConstantBufferIndex index, unsigned int size, std::shared_ptr sharedContext) + : m_Context(sharedContext), m_Index((int)index) + { + D3D11_BUFFER_DESC bufferDesc = { }; + + bufferDesc.ByteWidth = size; + bufferDesc.Usage = D3D11_USAGE_DYNAMIC; + bufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; + bufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + + HRESULT hr; + DXC(m_Context->GetDevice()->CreateBuffer(&bufferDesc, nullptr, &m_Buffer)); + m_Context->GetDeviceContext()->VSSetConstantBuffers(m_Index, 1u, m_Buffer.GetAddressOf()); + } + + void dxConstantBuffer::Bind() + { + m_Context->GetDeviceContext()->VSSetConstantBuffers(m_Index, 1u, m_Buffer.GetAddressOf()); + } + + void* dxConstantBuffer::Map() + { + m_Context->GetDeviceContext()->VSSetConstantBuffers(m_Index, 1u, m_Buffer.GetAddressOf()); + m_Context->GetDeviceContext()->Map(m_Buffer.Get(), NULL, D3D11_MAP_WRITE_DISCARD, NULL, &m_Map); + return m_Map.pData; + } + + void dxConstantBuffer::UnMap() + { + m_Context->GetDeviceContext()->Unmap(m_Buffer.Get(), NULL); + } + //* VERTEX_BUFFER *// dxVertexBuffer::dxVertexBuffer(float* vertices, unsigned int stride, unsigned int count, std::shared_ptr sharedContext) : m_Stride(stride), m_Context(sharedContext) diff --git a/Engine/src/Platform/GraphicsAPI/DirectX/dxBuffers.h b/Engine/src/Platform/GraphicsAPI/DirectX/dxBuffers.h index 26526e9..989abfb 100644 --- a/Engine/src/Platform/GraphicsAPI/DirectX/dxBuffers.h +++ b/Engine/src/Platform/GraphicsAPI/DirectX/dxBuffers.h @@ -10,6 +10,26 @@ namespace Light { class dxSharedContext; + //* INDEX_BUFFER *// + class dxConstantBuffer : public ConstantBuffer + { + private: + std::shared_ptr m_Context; + + Microsoft::WRL::ComPtr m_Buffer; + D3D11_MAPPED_SUBRESOURCE m_Map; + + unsigned int m_Index; + + public: + dxConstantBuffer(ConstantBufferIndex index, unsigned int size, std::shared_ptr sharedContext); + + void Bind() override; + + void* Map() override; + void UnMap() override; + }; + //* VERTEX_BUFFER *// class dxVertexBuffer : public VertexBuffer { diff --git a/Engine/src/Platform/GraphicsAPI/DirectX/dxVertexLayout.cpp b/Engine/src/Platform/GraphicsAPI/DirectX/dxVertexLayout.cpp index f525f7e..d3badf4 100644 --- a/Engine/src/Platform/GraphicsAPI/DirectX/dxVertexLayout.cpp +++ b/Engine/src/Platform/GraphicsAPI/DirectX/dxVertexLayout.cpp @@ -23,7 +23,7 @@ namespace Light { 0u, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, - 0u }); + 0u }); } std::shared_ptr dxpShader = std::dynamic_pointer_cast(shader); diff --git a/Engine/src/Platform/GraphicsAPI/OpenGL/glBuffers.cpp b/Engine/src/Platform/GraphicsAPI/OpenGL/glBuffers.cpp index 515bfd1..4a434fd 100644 --- a/Engine/src/Platform/GraphicsAPI/OpenGL/glBuffers.cpp +++ b/Engine/src/Platform/GraphicsAPI/OpenGL/glBuffers.cpp @@ -5,6 +5,37 @@ namespace Light { + //** CONSTANT_BUFFER **// + glConstantBuffer::glConstantBuffer(ConstantBufferIndex index, unsigned int size) + : m_Index((int)index) + { + glCreateBuffers(1, &m_BufferID); + glNamedBufferData(m_BufferID, size, nullptr, GL_DYNAMIC_DRAW); + + Bind(); + } + + glConstantBuffer::~glConstantBuffer() + { + glDeleteBuffers(1, &m_BufferID); + } + + void glConstantBuffer::Bind() + { + glBindBufferBase(GL_UNIFORM_BUFFER, m_Index, m_BufferID); + } + + void* glConstantBuffer::Map() + { + void* map = glMapNamedBuffer(m_BufferID, GL_WRITE_ONLY); + return map; + } + + void glConstantBuffer::UnMap() + { + glUnmapNamedBuffer(m_BufferID); + } + //** VERTEX_BUFFER **// glVertexBuffer::glVertexBuffer(float* vertices, unsigned int count) { diff --git a/Engine/src/Platform/GraphicsAPI/OpenGL/glBuffers.h b/Engine/src/Platform/GraphicsAPI/OpenGL/glBuffers.h index 896135c..23db170 100644 --- a/Engine/src/Platform/GraphicsAPI/OpenGL/glBuffers.h +++ b/Engine/src/Platform/GraphicsAPI/OpenGL/glBuffers.h @@ -5,6 +5,21 @@ namespace Light { + class glConstantBuffer : public ConstantBuffer + { + private: + unsigned int m_BufferID, m_Index; + + public: + glConstantBuffer(ConstantBufferIndex index, unsigned int size); + ~glConstantBuffer(); + + void Bind() override; + + void* Map() override; + void UnMap() override; + }; + //** VERTEX_BUFFER **// class glVertexBuffer : public VertexBuffer { diff --git a/Engine/src/Platform/GraphicsAPI/OpenGL/glGraphicsContext.cpp b/Engine/src/Platform/GraphicsAPI/OpenGL/glGraphicsContext.cpp index 4305a7c..8328735 100644 --- a/Engine/src/Platform/GraphicsAPI/OpenGL/glGraphicsContext.cpp +++ b/Engine/src/Platform/GraphicsAPI/OpenGL/glGraphicsContext.cpp @@ -26,6 +26,8 @@ namespace Light { // load opengl (glad) LT_ENGINE_ASSERT(gladLoadGLLoader((GLADloadproc)glfwGetProcAddress), "glGraphicsContext::glGraphicsContext: failed to initialize opengl (glad)"); + SetDebugMessageCallback(); + // #todo: add blender glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); diff --git a/Sandbox/src/SandboxLayer.h b/Sandbox/src/SandboxLayer.h index 5fd8428..5c00ac1 100644 --- a/Sandbox/src/SandboxLayer.h +++ b/Sandbox/src/SandboxLayer.h @@ -45,11 +45,10 @@ public: bool OnKeyPressed(const Light::KeyPressedEvent& event) override { - // #todo: add input class if (event.GetKey() == 65) // GLFW_KEY_A - m_Direction.x += 1.0f; + m_Direction.x += -1.0f; if(event.GetKey() == 68) // GLFW_KEY_D - m_Direction.x += -1.0f; + m_Direction.x += 1.0f; if (event.GetKey() == 87) // GLFW_KEY_W m_Direction.y += 1.0f; @@ -63,9 +62,9 @@ public: { // #todo: add input class if (event.GetKey() == 65) // GLFW_KEY_A - m_Direction.x -= 1.0f; - if (event.GetKey() == 68) // GLFW_KEY_D m_Direction.x -= -1.0f; + if (event.GetKey() == 68) // GLFW_KEY_D + m_Direction.x -= 1.0f; if (event.GetKey() == 87) // GLFW_KEY_W m_Direction.y -= 1.0f;