From 3f1c26bfbb80c72be82f14543f4fb0455255ffe8 Mon Sep 17 00:00:00 2001 From: Notiooo Date: Sun, 5 Nov 2023 01:38:02 +0100 Subject: [PATCH] Work --- AimGL/CMakeSettings.json | 27 +++++ AimGL/resources/Shaders/Graphics/Sprite.fs | 15 +++ AimGL/resources/Shaders/Graphics/Sprite.vs | 17 +++ AimGL/resources/Shaders/basic.fs | 9 +- AimGL/resources/Shaders/basic.vs | 9 +- AimGL/resources/Textures/dead-inside.png | Bin 0 -> 103502 bytes AimGL/src/CMakeLists.txt | 13 ++- AimGL/src/CMakeLists_Sources.txt | 5 +- AimGL/src/Game.cpp | 13 ++- AimGL/src/Renderer3D/Renderer3D.cpp | 11 ++ AimGL/src/Renderer3D/Renderer3D.h | 3 + AimGL/src/Renderer3D/Shader.cpp | 23 ++-- AimGL/src/Renderer3D/Shader.h | 21 ++-- AimGL/src/Renderer3D/Sprite2D.cpp | 107 ++++++++++++++++++ AimGL/src/Renderer3D/Sprite2D.h | 98 ++++++++++++++++ AimGL/src/Renderer3D/Texture.cpp | 71 ++++++++++++ AimGL/src/Renderer3D/Texture.h | 51 ++++++++- .../src/States/CustomStates/ExitGameState.cpp | 7 ++ AimGL/src/States/CustomStates/ExitGameState.h | 14 +++ AimGL/src/States/CustomStates/LogoState.cpp | 69 +++++++++++ .../{SampleState.h => LogoState.h} | 37 +++--- AimGL/src/States/CustomStates/SampleState.cpp | 56 --------- AimGL/src/States/StateStack.cpp | 12 +- AimGL/src/States/States.h | 23 +++- AimGL/src/pch.h | 2 +- AimGL/vendor/CMakeLists.txt | 3 +- AimGL/vendor/stb/CMakeLists.txt | 10 ++ 27 files changed, 619 insertions(+), 107 deletions(-) create mode 100644 AimGL/CMakeSettings.json create mode 100644 AimGL/resources/Shaders/Graphics/Sprite.fs create mode 100644 AimGL/resources/Shaders/Graphics/Sprite.vs create mode 100644 AimGL/resources/Textures/dead-inside.png create mode 100644 AimGL/src/Renderer3D/Sprite2D.cpp create mode 100644 AimGL/src/Renderer3D/Sprite2D.h create mode 100644 AimGL/src/Renderer3D/Texture.cpp create mode 100644 AimGL/src/States/CustomStates/ExitGameState.cpp create mode 100644 AimGL/src/States/CustomStates/ExitGameState.h create mode 100644 AimGL/src/States/CustomStates/LogoState.cpp rename AimGL/src/States/CustomStates/{SampleState.h => LogoState.h} (68%) delete mode 100644 AimGL/src/States/CustomStates/SampleState.cpp create mode 100644 AimGL/vendor/stb/CMakeLists.txt diff --git a/AimGL/CMakeSettings.json b/AimGL/CMakeSettings.json new file mode 100644 index 0000000..0c5fbf9 --- /dev/null +++ b/AimGL/CMakeSettings.json @@ -0,0 +1,27 @@ +{ + "configurations": [ + { + "name": "x64-Debug", + "generator": "Ninja", + "configurationType": "Debug", + "inheritEnvironments": [ "msvc_x64_x64" ], + "buildRoot": "${projectDir}\\out\\build\\${name}", + "installRoot": "${projectDir}\\out\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "", + "ctestCommandArgs": "" + }, + { + "name": "x64-Release", + "generator": "Ninja", + "configurationType": "RelWithDebInfo", + "buildRoot": "${projectDir}\\out\\build\\${name}", + "installRoot": "${projectDir}\\out\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "", + "ctestCommandArgs": "", + "inheritEnvironments": [ "msvc_x64_x64" ], + "variables": [] + } + ] +} \ No newline at end of file diff --git a/AimGL/resources/Shaders/Graphics/Sprite.fs b/AimGL/resources/Shaders/Graphics/Sprite.fs new file mode 100644 index 0000000..4804d00 --- /dev/null +++ b/AimGL/resources/Shaders/Graphics/Sprite.fs @@ -0,0 +1,15 @@ +#version 330 core + +in vec2 TexCoords; +out vec4 color; + +uniform sampler2D spriteTexture; +uniform float opacity = 0.f; + +void main() +{ + color = texture(spriteTexture, TexCoords); + color.a = min(color.a, opacity); + if(color.a == 0.0) + discard; +} \ No newline at end of file diff --git a/AimGL/resources/Shaders/Graphics/Sprite.vs b/AimGL/resources/Shaders/Graphics/Sprite.vs new file mode 100644 index 0000000..d062eca --- /dev/null +++ b/AimGL/resources/Shaders/Graphics/Sprite.vs @@ -0,0 +1,17 @@ +#version 330 core + +layout(location = 0) in vec2 position; // Vertex position +layout(location = 1) in vec2 texCoords; // Texture coordinates + +out vec2 TexCoords; + +uniform mat4 model; +uniform mat4 projection = mat4(1.0); // For 2D it is identity +uniform mat4 windowProjection; + +void main() +{ + TexCoords = texCoords; + mat4 mvp = windowProjection * model; + gl_Position = mvp * vec4(position, 0.0, 1.0); +} \ No newline at end of file diff --git a/AimGL/resources/Shaders/basic.fs b/AimGL/resources/Shaders/basic.fs index 8379ff8..a081fad 100644 --- a/AimGL/resources/Shaders/basic.fs +++ b/AimGL/resources/Shaders/basic.fs @@ -1,7 +1,12 @@ #version 330 core out vec4 FragColor; + +in vec3 ourColor; +in vec2 TexCoord; + +uniform sampler2D ourTexture; void main() { - FragColor = vec4(0.5,0.5,0.1,1); -} \ No newline at end of file + FragColor = texture(ourTexture, TexCoord); +} \ No newline at end of file diff --git a/AimGL/resources/Shaders/basic.vs b/AimGL/resources/Shaders/basic.vs index cdd6dd3..311ec24 100644 --- a/AimGL/resources/Shaders/basic.vs +++ b/AimGL/resources/Shaders/basic.vs @@ -1,7 +1,14 @@ #version 330 core layout (location = 0) in vec3 aPos; +layout (location = 1) in vec3 aColor; +layout (location = 2) in vec2 aTexCoord; + +out vec3 ourColor; +out vec2 TexCoord; void main() { - gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0); + gl_Position = vec4(aPos, 1.0); + ourColor = aColor; + TexCoord = aTexCoord; } \ No newline at end of file diff --git a/AimGL/resources/Textures/dead-inside.png b/AimGL/resources/Textures/dead-inside.png new file mode 100644 index 0000000000000000000000000000000000000000..afed2a8949e6bbbf5f18b2757d818e75cc8f757a GIT binary patch literal 103502 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�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::SampleState, *mGameWindow); + mAppStack.saveState(State_ID::LogoState, *mGameWindow); + mAppStack.saveState(State_ID::ExitGameState); // Initial state of the statestack is TitleState - mAppStack.push(State_ID::SampleState); + mAppStack.push(State_ID::LogoState); } void Game::run() @@ -215,7 +220,7 @@ void Game::update(const sf::Time& deltaTime) void Game::render() { MTR_SCOPE("Game", "Game::render"); - glClearColor(0.43f, 0.69f, 1.0f, 1.0f); + glClearColor(0.f, 0.f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // draw the application diff --git a/AimGL/src/Renderer3D/Renderer3D.cpp b/AimGL/src/Renderer3D/Renderer3D.cpp index c74cfb4..f3cdc64 100644 --- a/AimGL/src/Renderer3D/Renderer3D.cpp +++ b/AimGL/src/Renderer3D/Renderer3D.cpp @@ -1,12 +1,23 @@ #include "Renderer3D.h" #include "pch.h" +Renderer3D::Renderer3D(sf::Window& window) + : mWindow(window) +{ +} + void Renderer3D::draw(const VertexArray& va, const IndexBuffer& ib, const Shader& shader, const DrawMode& drawMode) const { + // mWindow.setActive(true); shader.bind(); va.bind(); ib.bind(); + float aspectRatio = static_cast(mWindow.getSize().x) / mWindow.getSize().y; + + glm::mat4 windowProjection = glm::ortho(0.f, static_cast(mWindow.getSize().x), 0.f, + static_cast(mWindow.getSize().y)); + shader.setUniform("windowProjection", windowProjection); GLCall(glDrawElements(toOpenGl(drawMode), ib.size(), GL_UNSIGNED_INT, nullptr)); #ifdef _DEBUG diff --git a/AimGL/src/Renderer3D/Renderer3D.h b/AimGL/src/Renderer3D/Renderer3D.h index 180a35c..8b2ab9d 100644 --- a/AimGL/src/Renderer3D/Renderer3D.h +++ b/AimGL/src/Renderer3D/Renderer3D.h @@ -17,6 +17,8 @@ class Renderer3D Quads }; + Renderer3D(sf::Window& window); + /** * Draws the data given in VertexArray, IndexBuffer to the screen using the interpretation given * in Shader. @@ -29,4 +31,5 @@ class Renderer3D private: unsigned toOpenGl(const DrawMode& drawMode) const; + sf::Window& mWindow; }; \ No newline at end of file diff --git a/AimGL/src/Renderer3D/Shader.cpp b/AimGL/src/Renderer3D/Shader.cpp index af7015b..1242b49 100644 --- a/AimGL/src/Renderer3D/Shader.cpp +++ b/AimGL/src/Renderer3D/Shader.cpp @@ -28,47 +28,52 @@ void Shader::unbind() const GLCall(glUseProgram(0)); } -void Shader::setUniform(const std::string& name, float f1, float f2, float f3, float f4) +void Shader::setUniform(const std::string& name, glm::mat4 mat) const +{ + GLCall(glUniformMatrix4fv(getUniformLocation(name), 1, GL_FALSE, glm::value_ptr(mat[0]))); +} + +void Shader::setUniform(const std::string& name, float f1, float f2, float f3, float f4) const { GLCall(glUniform4f(getUniformLocation(name), f1, f2, f3, f4)); } -void Shader::setUniform(const std::string& name, float f1, float f2, float f3) +void Shader::setUniform(const std::string& name, float f1, float f2, float f3) const { GLCall(glUniform3f(getUniformLocation(name), f1, f2, f3)); } -void Shader::setUniform(const std::string& name, float f1, float f2) +void Shader::setUniform(const std::string& name, float f1, float f2) const { GLCall(glUniform2f(getUniformLocation(name), f1, f2)); } -void Shader::setUniform(const std::string& name, float f1) +void Shader::setUniform(const std::string& name, float f1) const { GLCall(glUniform1f(getUniformLocation(name), f1)); } -void Shader::setUniform(const std::string& name, int i1, int i2, int i3, int i4) +void Shader::setUniform(const std::string& name, int i1, int i2, int i3, int i4) const { GLCall(glUniform4i(getUniformLocation(name), i1, i2, i3, i4)); } -void Shader::setUniform(const std::string& name, int i1, int i2, int i3) +void Shader::setUniform(const std::string& name, int i1, int i2, int i3) const { GLCall(glUniform3i(getUniformLocation(name), i1, i2, i3)); } -void Shader::setUniform(const std::string& name, int i1, int i2) +void Shader::setUniform(const std::string& name, int i1, int i2) const { GLCall(glUniform2i(getUniformLocation(name), i1, i2)); } -void Shader::setUniform(const std::string& name, int i1) +void Shader::setUniform(const std::string& name, int i1) const { GLCall(glUniform1i(getUniformLocation(name), i1)); } -unsigned Shader::getUniformLocation(const std::string& name) +unsigned Shader::getUniformLocation(const std::string& name) const { if (mUniformLocationCache.find(name) != mUniformLocationCache.end()) { diff --git a/AimGL/src/Renderer3D/Shader.h b/AimGL/src/Renderer3D/Shader.h index eeabb76..2dbc1e7 100644 --- a/AimGL/src/Renderer3D/Shader.h +++ b/AimGL/src/Renderer3D/Shader.h @@ -63,14 +63,15 @@ class Shader */ void unbind() const; - void setUniform(const std::string& name, float f1, float f2, float f3, float f4); - void setUniform(const std::string& name, float f1, float f2, float f3); - void setUniform(const std::string& name, float f1, float f2); - void setUniform(const std::string& name, float f1); - void setUniform(const std::string& name, int i1, int i2, int i3, int i4); - void setUniform(const std::string& name, int i1, int i2, int i3); - void setUniform(const std::string& name, int i1, int i2); - void setUniform(const std::string& name, int i1); + void setUniform(const std::string& name, glm::mat4 mat) const; + void setUniform(const std::string& name, float f1, float f2, float f3, float f4) const; + void setUniform(const std::string& name, float f1, float f2, float f3) const; + void setUniform(const std::string& name, float f1, float f2) const; + void setUniform(const std::string& name, float f1) const; + void setUniform(const std::string& name, int i1, int i2, int i3, int i4) const; + void setUniform(const std::string& name, int i1, int i2, int i3) const; + void setUniform(const std::string& name, int i1, int i2) const; + void setUniform(const std::string& name, int i1) const; private: @@ -113,7 +114,7 @@ class Shader * \param name Name of uniform * \return Location, or -1 in case of failure */ - unsigned getUniformLocation(const std::string& name); + unsigned getUniformLocation(const std::string& name) const; /** * \brief Creates a shader based on shader types and source code @@ -138,7 +139,7 @@ class Shader private: unsigned int mRendererId; - std::unordered_map mUniformLocationCache; + mutable std::unordered_map mUniformLocationCache; }; /** diff --git a/AimGL/src/Renderer3D/Sprite2D.cpp b/AimGL/src/Renderer3D/Sprite2D.cpp new file mode 100644 index 0000000..185d6a1 --- /dev/null +++ b/AimGL/src/Renderer3D/Sprite2D.cpp @@ -0,0 +1,107 @@ +#include "Sprite2D.h" +#include "pch.h" + +Sprite2D::Sprite2D(const Texture& texture) + : mTexture(texture) + , mShader{{ShaderType::VertexShader, "resources/Shaders/Graphics/Sprite.vs"}, + {ShaderType::FragmentShader, "resources/Shaders/Graphics/Sprite.fs"}} + , mPosition(0.0f) + , mScale(1.0f) + , mRotation(0.f) +{ + + initializeBuffers(); + setScale(1); + setPosition({0.f, 0.f}); +} + +void Sprite2D::initializeBuffers() +{ + float vertices[] = { + // positions // texture coords + 1.f, 1.f, 1.0f, 1.0f,// top right + 1.f, -1.f, 1.0f, 0.0f,// bottom right + -1.f, -1.f, 0.0f, 0.0f,// bottom left + -1.f, 1.f, 0.0f, 1.0f // top left + }; + + unsigned int indices[] = { + 0, 1, 3,// first Triangle + 1, 2, 3 // second Triangle + }; + + mVBO.setBuffer(vertices, sizeof(vertices)); + mEBO.setBuffer(indices, sizeof(indices)); + + mVAO.bind(); + mVBO.bind(); + mBufferLayout.push(2); + mBufferLayout.push(2); + mVAO.setBuffer(mVBO, mBufferLayout); + mVAO.unbind(); +} + +void Sprite2D::draw(const Renderer3D& target) const +{ + // Prepare transformations + mShader.bind(); + mTexture.bind(0); + target.draw(mVAO, mEBO, mShader); +} + +void Sprite2D::updateModel() +{ + glm::mat4 model = glm::mat4(1.0f); + model = glm::translate(model, glm::vec3(mPosition)); + model = glm::rotate(model, glm::radians(mRotation), glm::vec3(0.0f, 0.0f, 1.0f)); + model = glm::scale(model, glm::vec3(mScale, 1.0f)); + mShader.bind(); + mShader.setUniform("model", model); + mShader.unbind(); +} + +void Sprite2D::setPosition(const glm::vec2& newPosition, Origin origin) +{ + switch (origin) + { + case Origin::Center: mPosition = glm::vec3(newPosition, 0.f); break; + case Origin::LeftBottom: + mPosition = glm::vec3(newPosition, 0.f); + mPosition += glm::vec3{mTexture.width(), mTexture.height(), 0.f}; + break; + } + updateModel(); +} + +void Sprite2D::setScale(float newScale) +{ + mScale = {mTexture.width(), mTexture.height()}; + mScale *= newScale; +} + +void Sprite2D::setRotation(float angle) +{ + mRotation = angle; +} + +void Sprite2D::setOpacity(float opacity) +{ + mOpacity = opacity; + mShader.bind(); + mShader.setUniform("opacity", mOpacity); + mShader.unbind(); +} + +void Sprite2D::setWidth(float width) +{ + mScale = {width, width / mTexture.aspectRatio()}; + mScale /= 2.f; + updateModel(); +} + +void Sprite2D::setHeight(float height) +{ + mScale = {height * mTexture.aspectRatio(), height}; + mScale /= 2.f; + updateModel(); +} diff --git a/AimGL/src/Renderer3D/Sprite2D.h b/AimGL/src/Renderer3D/Sprite2D.h new file mode 100644 index 0000000..b02447d --- /dev/null +++ b/AimGL/src/Renderer3D/Sprite2D.h @@ -0,0 +1,98 @@ +#pragma once +#include "BufferLayout.h" +#include "Renderer3D.h" +#include "Shader.h" +#include "Texture.h" +#include "VertexArray.h" +#include "VertexBuffer.h" + +/** + * \brief A representation of a texture that has its own transformation. + */ +class Sprite2D +{ +public: + /** + * \brief Determines the point that defines the root of the sprite's position. + * + * For example, setting Origin to Center and setting the position to + * point (0,0) makes the sprite's center at point (0,0). + */ + enum class Origin + { + LeftBottom, + Center + }; + + /** + * \brief Constructs a sprite from the given texture. + * \param texture Texture from which the sprite is to be created + */ + Sprite2D(const Texture& texture); + + /** + * \brief Draws a sprite for a given target + * \param target The target to which the sprite is drawn + */ + void draw(const Renderer3D& target) const; + + /** + * \brief Sets the position of the sprite on the screen + * \param newPosition New position to which the sprite will be set + * \param origin Relative to which origin the sprite will be located + */ + void setPosition(const glm::vec2& newPosition, Origin origin = Origin::LeftBottom); + + /** + * \brief Sets the scale at which the sprite will be drawn + * \param newScale New scale with which the sprite will be drawna + */ + void setScale(float newScale); + + /** + * \brief Rotates the sprite + * \param angle The angle by which the sprite is to be rotated + */ + void setRotation(float angle); + + /** + * \brief Sets the transparency of the sprite in range 0 - 1 + * \param opacity New sprite transparency in the range of 0 - 1 + */ + void setOpacity(float opacity); + + /** + * \brief Sets the width of the sprite while the aspect ratio remains preserved + * \param width New sprite width + */ + void setWidth(float width); + + /** + * \brief Sets the height of the sprite while the aspect ratio remains preserved + * \param height New sprite height + */ + void setHeight(float height); + +private: + /** + * \brief Updates the model in the shader (model of MVP) + */ + void updateModel(); + + /** + * \brief Prepares buffers to work + */ + void initializeBuffers(); + +private: + VertexArray mVAO; + VertexBuffer mVBO; + IndexBuffer mEBO; + const Texture& mTexture; + Shader mShader; + BufferLayout mBufferLayout; + glm::vec3 mPosition; + glm::vec2 mScale; + float mRotation; + float mOpacity; +}; diff --git a/AimGL/src/Renderer3D/Texture.cpp b/AimGL/src/Renderer3D/Texture.cpp new file mode 100644 index 0000000..cb55eeb --- /dev/null +++ b/AimGL/src/Renderer3D/Texture.cpp @@ -0,0 +1,71 @@ +#include "Texture.h" +#include "pch.h" + +#include "Renderer3D/OpenglUtils.h" + +#define STB_IMAGE_IMPLEMENTATION +#include "stb_image.h" + +Texture::Texture(const std::string& filePath) + : mTextureId(0) + , mFilePath(filePath) + , mData(nullptr) + , mWidth(0) + , mHeight(0) + , mNrChannels(0) +{ + stbi_set_flip_vertically_on_load(true); + mData = stbi_load(filePath.c_str(), &mWidth, &mHeight, &mNrChannels, 0); + GLCall(glGenTextures(1, &mTextureId)); + GLCall(glBindTexture(GL_TEXTURE_2D, mTextureId)); + + GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); + GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); + GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)); + GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)); + + if (mData) + { + GLCall(glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, mWidth, mHeight, 0, GL_RGBA, + GL_UNSIGNED_BYTE, mData)); + GLCall(glGenerateMipmap(GL_TEXTURE_2D)); + mAspectRatio = static_cast(mWidth) / static_cast(mHeight); + unbind(); + } + else + { + spdlog::error("Failed to load a texture: {}", filePath); + } + stbi_image_free(mData); +}; + +Texture::~Texture() +{ + GLCall(glDeleteTextures(1, &mTextureId)); +} + +void Texture::bind(unsigned int slot) const +{ + GLCall(glActiveTexture(GL_TEXTURE0 + slot)); + GLCall(glBindTexture(GL_TEXTURE_2D, mTextureId)); +} + +void Texture::unbind() const +{ + GLCall(glBindTexture(GL_TEXTURE_2D, 0)); +} + +int Texture::width() const +{ + return mWidth; +} + +int Texture::height() const +{ + return mHeight; +} + +float Texture::aspectRatio() const +{ + return mAspectRatio; +} diff --git a/AimGL/src/Renderer3D/Texture.h b/AimGL/src/Renderer3D/Texture.h index 300fb2b..51b8920 100644 --- a/AimGL/src/Renderer3D/Texture.h +++ b/AimGL/src/Renderer3D/Texture.h @@ -1,6 +1,55 @@ #pragma once - +/** + * \brief The image, closed in a buffer, lives on the graphics card. + */ class Texture { +public: + /** + * \brief Creates a texture based on the file path to image + * \param filePath Path to the image + */ + Texture(const std::string& filePath); + + /** + * \brief Removes texture + */ + ~Texture(); + + /** + * \brief Binds a texture for rendering + * \param slot Slot to which the texture will be binded (can be obtained from the shader level) + */ + void bind(unsigned int slot = 0) const; + + /** + * \brief Unbinds the texture from rendering + */ + void unbind() const; + + /** + * \brief Returns the width of the texture + * \return Width of the texture + */ + int width() const; + + /** + * \brief Returns the height of the texture + * \return Height of the texture + */ + int height() const; + + /** + * \brief Returns the aspect ratio of the image + * \return Aspect ratio of the image + */ + float aspectRatio() const; + +private: + unsigned int mTextureId; + std::string mFilePath; + unsigned char* mData; + float mAspectRatio; + int mWidth, mHeight, mNrChannels; }; \ No newline at end of file diff --git a/AimGL/src/States/CustomStates/ExitGameState.cpp b/AimGL/src/States/CustomStates/ExitGameState.cpp new file mode 100644 index 0000000..5c2fd20 --- /dev/null +++ b/AimGL/src/States/CustomStates/ExitGameState.cpp @@ -0,0 +1,7 @@ +#include "ExitGameState.h" +#include "pch.h" + +ExitGameState::ExitGameState(StateStack& stack) + : State(stack) +{ +} \ No newline at end of file diff --git a/AimGL/src/States/CustomStates/ExitGameState.h b/AimGL/src/States/CustomStates/ExitGameState.h new file mode 100644 index 0000000..3f9c70b --- /dev/null +++ b/AimGL/src/States/CustomStates/ExitGameState.h @@ -0,0 +1,14 @@ +#pragma once + +#include "States/State.h" + +class StateStack; + +/** + * @brief The state in which the player wants to close the game + */ +class ExitGameState : public State +{ +public: + explicit ExitGameState(StateStack& stack); +}; \ No newline at end of file diff --git a/AimGL/src/States/CustomStates/LogoState.cpp b/AimGL/src/States/CustomStates/LogoState.cpp new file mode 100644 index 0000000..c00db22 --- /dev/null +++ b/AimGL/src/States/CustomStates/LogoState.cpp @@ -0,0 +1,69 @@ +#include "LogoState.h" +#include "States/StateStack.h" +#include "pch.h" + +LogoState::LogoState(StateStack& stack, sf::Window& window) + : State(stack) + , mWindow(window) + , mLogoTexture("resources/Textures/logo.png") + , mLogo(mLogoTexture) + , mRenderer3D(window) + , mPhase(Phase::FadeIn) +{ + mClock.restart(); + mLogo.setPosition(glm::vec2(mWindow.getSize().x / 2.f, mWindow.getSize().y / 2.f), + Sprite2D::Origin::Center); + mLogo.setHeight(mWindow.getSize().y); + mLogo.setOpacity(0); +} + +void LogoState::draw(sf::Window& target) const +{ + MTR_SCOPE("SampleState", "SampleState::draw"); + mLogo.draw(mRenderer3D); +} + +bool LogoState::fixedUpdate(const float& deltaTime) +{ + MTR_SCOPE("SampleState", "SampleState::fixedUpdate"); + return true; +} + +bool LogoState::update(const float& deltaTime) +{ + MTR_SCOPE("SampleState", "SampleState::update"); + switch (mPhase) + { + case Phase::FadeIn: + mLogo.setOpacity((mClock.getElapsedTime().asSeconds() / 2.f) - 0.2f); + if (mClock.getElapsedTime().asSeconds() > 3.f) + { + mPhase = Phase::Fadeout; + mClock.restart(); + } + break; + + case Phase::Fadeout: + mLogo.setOpacity(2.f - mClock.getElapsedTime().asSeconds() / 2.f); + if (mClock.getElapsedTime().asSeconds() > 4.f) + { + requestPop(); + requestPush(State_ID::ExitGameState); + } + break; + } + return true; +} + +bool LogoState::handleEvent(const sf::Event& event) +{ + MTR_SCOPE("SampleState", "SampleState::handleEvent"); + return true; +} + +bool LogoState::updateImGui(const float& deltaTime) +{ + MTR_SCOPE("SampleState", "SampleState::updateImGui"); + ImGui::ShowDemoWindow(); + return true; +} diff --git a/AimGL/src/States/CustomStates/SampleState.h b/AimGL/src/States/CustomStates/LogoState.h similarity index 68% rename from AimGL/src/States/CustomStates/SampleState.h rename to AimGL/src/States/CustomStates/LogoState.h index ca209b8..6fcfe41 100644 --- a/AimGL/src/States/CustomStates/SampleState.h +++ b/AimGL/src/States/CustomStates/LogoState.h @@ -1,22 +1,18 @@ #pragma once -#include "Renderer3D/BufferLayout.h" -#include "Renderer3D/IndexBuffer.h" #include "Renderer3D/Renderer3D.h" -#include "Renderer3D/Shader.h" -#include "Renderer3D/Texture.h" -#include "Renderer3D/VertexArray.h" +#include "Renderer3D/Sprite2D.h" #include "States/State.h" class StateStack; /** - * \brief .... + * \brief Game state drawing the game logo */ -class SampleState : public State +class LogoState : public State { public: - SampleState(StateStack& stack, sf::Window& window); + LogoState(StateStack& stack, sf::Window& window); /** * \brief Draws only this state to the passed target @@ -50,11 +46,22 @@ class SampleState : public State bool updateImGui(const float& deltaTime) override; private: - Renderer3D render3D; - Texture mLogo; - VertexArray mVao; - VertexBuffer mVbo; - IndexBuffer mEbo; - BufferLayout mBufferLayout; - Shader mShader; + /** + * \brief This state is divided into two states: + * the state in which the logo fades in and + * the state in which the logo fades out. + */ + enum class Phase + { + FadeIn, + Fadeout + }; + +private: + Renderer3D mRenderer3D; + Texture mLogoTexture; + Sprite2D mLogo; + sf::Clock mClock; + sf::Window& mWindow; + Phase mPhase; }; diff --git a/AimGL/src/States/CustomStates/SampleState.cpp b/AimGL/src/States/CustomStates/SampleState.cpp deleted file mode 100644 index 6f2e2db..0000000 --- a/AimGL/src/States/CustomStates/SampleState.cpp +++ /dev/null @@ -1,56 +0,0 @@ -#include "SampleState.h" -#include "pch.h" - -float verticestest[] = { - 0.5f, 0.5f, 0.0f,// top right - 0.5f, -0.5f, 0.0f,// bottom right - -0.5f, -0.5f, 0.0f,// bottom left - -0.5f, 0.5f, 0.0f // top left -}; -unsigned int indicestest[] = { - // note that we start from 0! - 0, 1, 3,// first Triangle - 1, 2, 3 // second Triangle -}; - -SampleState::SampleState(StateStack& stack, sf::Window& window) - : State(stack) - , mShader{{ShaderType::VertexShader, "resources/Shaders/basic.vs"}, - {ShaderType::FragmentShader, "resources/Shaders/basic.fs"}} -{ - mVbo.setBuffer(verticestest, sizeof(verticestest)); - mEbo.setBuffer(indicestest, sizeof(indicestest)); - mBufferLayout.push(3); - mVao.setBuffer(mVbo, mBufferLayout); -} - -void SampleState::draw(sf::Window& target) const -{ - MTR_SCOPE("SampleState", "SampleState::draw"); - render3D.draw(mVao, mEbo, mShader); -} - -bool SampleState::fixedUpdate(const float& deltaTime) -{ - MTR_SCOPE("SampleState", "SampleState::fixedUpdate"); - return true; -} - -bool SampleState::update(const float& deltaTime) -{ - MTR_SCOPE("SampleState", "SampleState::update"); - return true; -} - -bool SampleState::handleEvent(const sf::Event& event) -{ - MTR_SCOPE("SampleState", "SampleState::handleEvent"); - return true; -} - -bool SampleState::updateImGui(const float& deltaTime) -{ - MTR_SCOPE("SampleState", "SampleState::updateImGui"); - ImGui::ShowDemoWindow(); - return true; -} diff --git a/AimGL/src/States/StateStack.cpp b/AimGL/src/States/StateStack.cpp index 683e848..c6cde3c 100644 --- a/AimGL/src/States/StateStack.cpp +++ b/AimGL/src/States/StateStack.cpp @@ -20,12 +20,19 @@ void StateStack::applyChanges() switch (change.operation) { case Perform::Push: + spdlog::info("[StateStack] Pushing state: {}", toString(change.stateID)); mStack.push_back({change.stateID, createState(change.stateID)}); break; - case Perform::Pop: mStack.pop_back(); break; + case Perform::Pop: + spdlog::info("[StateStack] Poping state from the top ({})", toString(top())); + mStack.pop_back(); + break; - case Perform::Clear: mStack.clear(); break; + case Perform::Clear: + spdlog::info("[StateStack] Clearing the StateStack"); + mStack.clear(); + break; } } mChangesQueue.clear(); @@ -149,5 +156,6 @@ State_ID StateStack::top() const void StateStack::forceInstantClear() { + spdlog::warn("[StateStack] Statestack is forced to clear all its states instantly"); mStack.clear(); } diff --git a/AimGL/src/States/States.h b/AimGL/src/States/States.h index 9968b08..ecd2b0a 100644 --- a/AimGL/src/States/States.h +++ b/AimGL/src/States/States.h @@ -8,12 +8,33 @@ enum class State_ID { // === Application flow states === // None, - SampleState, + LogoState, GameState, PauseState, ExitGameState }; +/** + * \brief Converts state identifier to text + * \param stateId State identifier + * \return Textual representation of the state + */ +inline std::string toString(State_ID stateId) +{ + switch (stateId) + { + + case State_ID::None: return "None"; + case State_ID::LogoState: return "LogoState"; + case State_ID::GameState: return "GameState"; + case State_ID::PauseState: return "PauseState"; + case State_ID::ExitGameState: return "ExitGameState"; + default: + spdlog::warn("I was unable to perform the ID to text conversion."); + return "Unknown State_ID"; + } +} + #endif \ No newline at end of file diff --git a/AimGL/src/pch.h b/AimGL/src/pch.h index 84627dc..dfe0c1f 100644 --- a/AimGL/src/pch.h +++ b/AimGL/src/pch.h @@ -16,7 +16,7 @@ // OpenGL #include -#include +#include #include #include #include diff --git a/AimGL/vendor/CMakeLists.txt b/AimGL/vendor/CMakeLists.txt index 18f1951..966fd53 100644 --- a/AimGL/vendor/CMakeLists.txt +++ b/AimGL/vendor/CMakeLists.txt @@ -9,4 +9,5 @@ add_subdirectory(glew) add_subdirectory(spdlog) add_subdirectory(result) add_subdirectory(entt) -add_subdirectory(minitrace) \ No newline at end of file +add_subdirectory(minitrace) +add_subdirectory(stb) \ No newline at end of file diff --git a/AimGL/vendor/stb/CMakeLists.txt b/AimGL/vendor/stb/CMakeLists.txt new file mode 100644 index 0000000..f455400 --- /dev/null +++ b/AimGL/vendor/stb/CMakeLists.txt @@ -0,0 +1,10 @@ +message(STATUS "Fetching stb...") + +FetchContent_Declare( + stb + GIT_REPOSITORY https://github.com/nothings/stb + GIT_TAG beebb24b945efdea3b9bba23affb8eb3ba8982e7 +) +FetchContent_MakeAvailable(stb) + +message(STATUS "stb Fetched!") \ No newline at end of file