From 34908f108ad7c2ee6cff96491a0bc40381477424 Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Sun, 31 Dec 2017 18:00:01 +0000 Subject: [Test] Benchmarking the engine and trying to optimize. --- examples/resources/fighter_fd.png | Bin 0 -> 6467 bytes examples/resources/fighter_fl.png | Bin 0 -> 2916 bytes examples/resources/fighter_md.png | Bin 0 -> 6464 bytes examples/resources/fighter_ml.png | Bin 0 -> 2843 bytes examples/resources/healer_fd.png | Bin 0 -> 7862 bytes examples/resources/healer_fl.png | Bin 0 -> 3256 bytes examples/resources/healer_md.png | Bin 0 -> 6756 bytes examples/resources/healer_ml.png | Bin 0 -> 2940 bytes examples/resources/mage_fd.png | Bin 0 -> 7026 bytes examples/resources/mage_fl.png | Bin 0 -> 3283 bytes examples/resources/mage_md.png | Bin 0 -> 6794 bytes examples/resources/mage_ml.png | Bin 0 -> 3139 bytes examples/resources/ranger_fd.png | Bin 0 -> 6798 bytes examples/resources/ranger_fl.png | Bin 0 -> 2884 bytes examples/resources/ranger_md.png | Bin 0 -> 6182 bytes examples/resources/ranger_ml.png | Bin 0 -> 2803 bytes examples/resources/textureshader.frag | 12 ++-- examples/resources/textureshader.vert | 8 +-- examples/shooter/main.cpp | 108 +++++++++++++++++++++++++++++++++- examples/shooter/player.cpp | 62 +++++++++++++++++++ examples/shooter/player.h | 37 ++++++++++++ examples/simplegame/main.cpp | 41 ++++++++++--- 22 files changed, 249 insertions(+), 19 deletions(-) create mode 100644 examples/resources/fighter_fd.png create mode 100644 examples/resources/fighter_fl.png create mode 100644 examples/resources/fighter_md.png create mode 100644 examples/resources/fighter_ml.png create mode 100644 examples/resources/healer_fd.png create mode 100644 examples/resources/healer_fl.png create mode 100644 examples/resources/healer_md.png create mode 100644 examples/resources/healer_ml.png create mode 100644 examples/resources/mage_fd.png create mode 100644 examples/resources/mage_fl.png create mode 100644 examples/resources/mage_md.png create mode 100644 examples/resources/mage_ml.png create mode 100644 examples/resources/ranger_fd.png create mode 100644 examples/resources/ranger_fl.png create mode 100644 examples/resources/ranger_md.png create mode 100644 examples/resources/ranger_ml.png create mode 100644 examples/shooter/player.cpp create mode 100644 examples/shooter/player.h (limited to 'examples') diff --git a/examples/resources/fighter_fd.png b/examples/resources/fighter_fd.png new file mode 100644 index 00000000..ea576b4d Binary files /dev/null and b/examples/resources/fighter_fd.png differ diff --git a/examples/resources/fighter_fl.png b/examples/resources/fighter_fl.png new file mode 100644 index 00000000..69b677ca Binary files /dev/null and b/examples/resources/fighter_fl.png differ diff --git a/examples/resources/fighter_md.png b/examples/resources/fighter_md.png new file mode 100644 index 00000000..1b333abb Binary files /dev/null and b/examples/resources/fighter_md.png differ diff --git a/examples/resources/fighter_ml.png b/examples/resources/fighter_ml.png new file mode 100644 index 00000000..74dca840 Binary files /dev/null and b/examples/resources/fighter_ml.png differ diff --git a/examples/resources/healer_fd.png b/examples/resources/healer_fd.png new file mode 100644 index 00000000..138e7c48 Binary files /dev/null and b/examples/resources/healer_fd.png differ diff --git a/examples/resources/healer_fl.png b/examples/resources/healer_fl.png new file mode 100644 index 00000000..8360cfb9 Binary files /dev/null and b/examples/resources/healer_fl.png differ diff --git a/examples/resources/healer_md.png b/examples/resources/healer_md.png new file mode 100644 index 00000000..20ce4d2f Binary files /dev/null and b/examples/resources/healer_md.png differ diff --git a/examples/resources/healer_ml.png b/examples/resources/healer_ml.png new file mode 100644 index 00000000..28377d6b Binary files /dev/null and b/examples/resources/healer_ml.png differ diff --git a/examples/resources/mage_fd.png b/examples/resources/mage_fd.png new file mode 100644 index 00000000..b6a692f7 Binary files /dev/null and b/examples/resources/mage_fd.png differ diff --git a/examples/resources/mage_fl.png b/examples/resources/mage_fl.png new file mode 100644 index 00000000..66f5d2e5 Binary files /dev/null and b/examples/resources/mage_fl.png differ diff --git a/examples/resources/mage_md.png b/examples/resources/mage_md.png new file mode 100644 index 00000000..40838087 Binary files /dev/null and b/examples/resources/mage_md.png differ diff --git a/examples/resources/mage_ml.png b/examples/resources/mage_ml.png new file mode 100644 index 00000000..d559fb56 Binary files /dev/null and b/examples/resources/mage_ml.png differ diff --git a/examples/resources/ranger_fd.png b/examples/resources/ranger_fd.png new file mode 100644 index 00000000..e574cb1f Binary files /dev/null and b/examples/resources/ranger_fd.png differ diff --git a/examples/resources/ranger_fl.png b/examples/resources/ranger_fl.png new file mode 100644 index 00000000..9bc31719 Binary files /dev/null and b/examples/resources/ranger_fl.png differ diff --git a/examples/resources/ranger_md.png b/examples/resources/ranger_md.png new file mode 100644 index 00000000..5803cbe6 Binary files /dev/null and b/examples/resources/ranger_md.png differ diff --git a/examples/resources/ranger_ml.png b/examples/resources/ranger_ml.png new file mode 100644 index 00000000..e2e528b4 Binary files /dev/null and b/examples/resources/ranger_ml.png differ diff --git a/examples/resources/textureshader.frag b/examples/resources/textureshader.frag index 8d916be6..1292de96 100644 --- a/examples/resources/textureshader.frag +++ b/examples/resources/textureshader.frag @@ -1,11 +1,10 @@ -#version 450 +#version 330 -layout(location = 0) in vec2 fragment_position; -layout(location = 1) in vec4 fragment_colour; -layout(location = 2) in vec2 fragment_uv; +in vec2 fragment_position; +in vec4 fragment_colour; +in vec2 fragment_uv; -layout(location = 0) out vec4 colour; -layout(location = 1) out vec4 colour2; +out vec4 colour; uniform sampler2D texture_sampler; @@ -13,6 +12,5 @@ void main() { vec4 texture_colour = texture(texture_sampler, fragment_uv); - colour2 = vec4(1.f, 0.f, 0.f, 1.f); colour = texture_colour; } diff --git a/examples/resources/textureshader.vert b/examples/resources/textureshader.vert index b0c11a6c..aac246c9 100644 --- a/examples/resources/textureshader.vert +++ b/examples/resources/textureshader.vert @@ -1,12 +1,12 @@ -#version 450 +#version 330 layout(location = 0) in vec2 vertex_position; layout(location = 1) in vec4 vertex_colour; layout(location = 2) in vec2 vertex_uv; -layout(location = 0) out vec2 fragment_position; -layout(location = 1) out vec4 fragment_colour; -layout(location = 2) out vec2 fragment_uv; +out vec2 fragment_position; +out vec4 fragment_colour; +out vec2 fragment_uv; uniform mat4 P; diff --git a/examples/shooter/main.cpp b/examples/shooter/main.cpp index 12cf218d..d2727877 100644 --- a/examples/shooter/main.cpp +++ b/examples/shooter/main.cpp @@ -1,6 +1,6 @@ #include -#include "glad/glad.h" +#include "player.h" using std::cout; @@ -12,9 +12,115 @@ int main(int argc, char **argv) yage::Shader shader("examples/resources/textureshader.vert", "examples/resources/textureshader.frag"); + std::vector male_l = { + yage::ResourceManager::getTexture("examples/resources/fighter_ml.png", + 3, 4), + yage::ResourceManager::getTexture("examples/resources/ranger_ml.png", 3, + 4), + yage::ResourceManager::getTexture("examples/resources/mage_ml.png", 3, + 4), + yage::ResourceManager::getTexture("examples/resources/healer_ml.png", 3, + 4)}; + std::vector female_l = { + yage::ResourceManager::getTexture("examples/resources/fighter_fl.png", + 3, 4), + yage::ResourceManager::getTexture("examples/resources/ranger_fl.png", 3, + 4), + yage::ResourceManager::getTexture("examples/resources/mage_fl.png", 3, + 4), + yage::ResourceManager::getTexture("examples/resources/healer_fl.png", 3, + 4)}; + std::vector male_d = { + yage::ResourceManager::getTexture("examples/resources/fighter_md.png", + 3, 4), + yage::ResourceManager::getTexture("examples/resources/ranger_md.png", 3, + 4), + yage::ResourceManager::getTexture("examples/resources/mage_md.png", 3, + 4), + yage::ResourceManager::getTexture("examples/resources/healer_md.png", 3, + 4)}; + std::vector female_d = { + yage::ResourceManager::getTexture("examples/resources/fighter_fd.png", + 3, 4), + yage::ResourceManager::getTexture("examples/resources/ranger_fd.png", 3, + 4), + yage::ResourceManager::getTexture("examples/resources/mage_fd.png", 3, + 4), + yage::ResourceManager::getTexture("examples/resources/healer_fd.png", 3, + 4)}; + + yage::SpriteBatch sp; + yage::Camera camera(800, 600); + + int i = 0; + int j = 0; + bool space_pressed = false; + bool c_pressed = false; + + shader.use(); + shader.setUniform("texture_sampler", 0); + + auto textures = male_l; + + Player player({400, 300, 48 * 2, 64 * 2}, textures.front()); + while (!window.shouldClose()) { window.pollEvents(); + + if (window.keyPressed(yage::key::D)) { + player.move(Direction::RIGHT); + } + if (window.keyPressed(yage::key::S)) { + player.move(Direction::DOWN); + } + if (window.keyPressed(yage::key::A)) { + player.move(Direction::LEFT); + } + if (window.keyPressed(yage::key::W)) { + player.move(Direction::UP); + } + if (!window.keyPressed(yage::key::D) && + !window.keyPressed(yage::key::S) && + !window.keyPressed(yage::key::A) && + !window.keyPressed(yage::key::W)) { + player.idle(); + } + if (window.keyPressed(yage::key::SPACE) && !space_pressed) { + space_pressed = true; + i = (i + 1) % textures.size(); + } + if (!window.keyPressed(yage::key::SPACE)) { + space_pressed = false; + } + if (window.keyPressed(yage::key::C) && !c_pressed) { + c_pressed = true; + j = (j + 1) % 4; + switch (j) { + case 0: + textures = male_l; + break; + case 1: + textures = male_d; + break; + case 2: + textures = female_l; + break; + case 3: + textures = female_d; + break; + } + } + if (!window.keyPressed(yage::key::C)) { + c_pressed = false; + } + + player.setTexture(textures[i]); + + camera.update(shader); + window.clearBuffer(); + player.draw(sp); + sp.render(); window.swapBuffer(); } diff --git a/examples/shooter/player.cpp b/examples/shooter/player.cpp new file mode 100644 index 00000000..2d0148e6 --- /dev/null +++ b/examples/shooter/player.cpp @@ -0,0 +1,62 @@ +#include "player.h" + +Player::Player(const glm::vec4 &bound, const yage::Texture &texture) + : bound_(bound), texture_(texture), direction_(Direction::DOWN), + action_(Action::IDLE), speed_(4) +{ +} + +void Player::setTexture(const yage::Texture &texture) { + texture_ = texture; +} + +void Player::draw(yage::SpriteBatch &sp) const +{ + static int time = 0; + static int iteration = 0; + float width = 1.f / static_cast(texture_.x); + float height = 1.f / static_cast(texture_.y); + + switch (action_) { + case Action::IDLE: + sp.draw(bound_, + {width, static_cast(direction_) * height, width, height}, + texture_.id, yage::Colour(255, 255, 255, 255), 0); + break; + case Action::MOVING: + if(time % 15 == 0) { + iteration = (iteration + 1) % 2; + } + sp.draw(bound_, + {iteration * 2 * width, static_cast(direction_) * height, width, height}, + texture_.id, yage::Colour(255, 255, 255, 255), 0); + time = (time + 1) % 59; + break; + } +} + +void Player::move(Direction direction) +{ + direction_ = direction; + action_ = Action::MOVING; + + switch (direction_) { + case Direction::LEFT: + bound_.x -= speed_; + break; + case Direction::DOWN: + bound_.y -= speed_; + break; + case Direction::RIGHT: + bound_.x += speed_; + break; + case Direction::UP: + bound_.y += speed_; + break; + } +} + +void Player::idle() +{ + action_ = Action::IDLE; +} diff --git a/examples/shooter/player.h b/examples/shooter/player.h new file mode 100644 index 00000000..72af7c34 --- /dev/null +++ b/examples/shooter/player.h @@ -0,0 +1,37 @@ +#ifndef EXAMPLE_SHOOTER_PLAYER_H +#define EXAMPLE_SHOOTER_PLAYER_H + +#include "yage/yage.h" + +enum class Direction { + LEFT, + DOWN, + RIGHT, + UP, +}; + +enum class Action { + IDLE, + MOVING, +}; + +class Player +{ +public: + Player(const glm::vec4 &bound, const yage::Texture &texture); + + void setTexture(const yage::Texture &texture); + + void draw(yage::SpriteBatch &sp) const; + + void move(Direction direction); + void idle(); +private: + glm::vec4 bound_; + yage::Texture texture_; + Direction direction_; + Action action_; + int speed_; +}; + +#endif diff --git a/examples/simplegame/main.cpp b/examples/simplegame/main.cpp index 895fce51..03c85123 100644 --- a/examples/simplegame/main.cpp +++ b/examples/simplegame/main.cpp @@ -17,10 +17,10 @@ using namespace yage; int main() { Window window; - window.create("Simple Game", 800, 640); + window.create("Simple Game", 1920, 1080); - Shader textureProgram("examples/resources/learnopenglshader.vert", - "examples/resources/learnopenglshader.frag"); + Shader textureProgram("examples/resources/textureshader.vert", + "examples/resources/textureshader.frag"); SpriteBatch sp; Texture fountain = ResourceManager::getTexture( @@ -32,9 +32,16 @@ int main() cout << "texture: " << brick.width << ", " << brick.height << '\n'; - Camera camera(800, 640); + Camera camera(1920, 1080); textureProgram.use(); - textureProgram.setUniform("ourTexture", 0); + textureProgram.setUniform("texture_sampler", 0); + + double prev_time = glfwGetTime(); + double final_time = 0; + double diff = 0; + double fps = 0; + int i = 0; + double time; while (!window.shouldClose()) { window.clearBuffer(); @@ -48,10 +55,30 @@ int main() texture = breast_plate; } - sp.draw({-0.5, -0.5, 1, 1}, {0, 0, 1, 1}, brick.id, Colour(255, 255, 255, 255), 0); + camera.update(textureProgram); - sp.render(); + time = glfwGetTime(); + for (int i = 0; i < 1920/10; i++) { + for(int j = 0; j < 1080/10; j++) + sp.draw({(float)(10*i), (float)(10*j), 10.f, 10.f}, {0.f, 0.f, 1.f, 1.f}, fountain.id, + Colour(255, 255, 255, 255), 0); + } + + sp.draw({50, 50, 100, 100}, {0, 0, 1, 1}, brick.id, Colour(255, 255, 255, 255), 1); + yLog << "draw: " << glfwGetTime() - time; + time = glfwGetTime(); + sp.render(); + yLog << "render: " << glfwGetTime() - time; window.swapBuffer(); + + if (i == 0) { + final_time = glfwGetTime(); + diff = final_time - prev_time; + prev_time = final_time; + fps = 1 / diff * 30; + yLog << "fps: " << fps; + } + i = (i + 1) % 30; } } -- cgit