diff options
Diffstat (limited to 'yage/base')
-rw-r--r-- | yage/base/camera2d.cpp | 2 | ||||
-rw-r--r-- | yage/base/glslprogram.cpp | 2 | ||||
-rw-r--r-- | yage/base/glslprogram.h | 2 | ||||
-rw-r--r-- | yage/base/imageloader.cpp | 7 | ||||
-rw-r--r-- | yage/base/sprite.cpp | 2 | ||||
-rw-r--r-- | yage/base/sprite.h | 4 | ||||
-rw-r--r-- | yage/base/spritebatch.h | 5 | ||||
-rw-r--r-- | yage/base/spritesheet.cpp | 122 | ||||
-rw-r--r-- | yage/base/spritesheet.h | 67 | ||||
-rw-r--r-- | yage/base/texture.h | 7 | ||||
-rw-r--r-- | yage/base/vertex.h | 2 | ||||
-rw-r--r-- | yage/base/window.cpp | 55 | ||||
-rw-r--r-- | yage/base/window.h | 9 |
13 files changed, 224 insertions, 62 deletions
diff --git a/yage/base/camera2d.cpp b/yage/base/camera2d.cpp index e23b75fa..9eda38ee 100644 --- a/yage/base/camera2d.cpp +++ b/yage/base/camera2d.cpp @@ -8,7 +8,7 @@ #include "camera2d.h" -#include <GL/glew.h> +#include <glad/glad.h> namespace yage { diff --git a/yage/base/glslprogram.cpp b/yage/base/glslprogram.cpp index 131a1a28..cff84e40 100644 --- a/yage/base/glslprogram.cpp +++ b/yage/base/glslprogram.cpp @@ -6,7 +6,7 @@ * ---------------------------------------------------------------------------- */ -#include <yage/base/glslprogram.h> +#include "glslprogram.h" #include <fstream> #include <stdexcept> diff --git a/yage/base/glslprogram.h b/yage/base/glslprogram.h index fbe5ac5c..545dbe54 100644 --- a/yage/base/glslprogram.h +++ b/yage/base/glslprogram.h @@ -9,7 +9,7 @@ #ifndef GLSL_PROGRAM_H #define GLSL_PROGRAM_H -#include <GL/glew.h> +#include <glad/glad.h> #include <string> diff --git a/yage/base/imageloader.cpp b/yage/base/imageloader.cpp index 983c350e..0d7d5df9 100644 --- a/yage/base/imageloader.cpp +++ b/yage/base/imageloader.cpp @@ -17,8 +17,6 @@ namespace yage Texture ImageLoader::loadPng(const std::string &file_path) { - Texture texture = {}; - std::vector<unsigned char> in; std::vector<unsigned char> out; unsigned long width, height; @@ -35,6 +33,8 @@ Texture ImageLoader::loadPng(const std::string &file_path) std::to_string(error_code)); } + Texture texture{0, (int)width, (int)height}; + glGenTextures(1, &texture.id); glBindTexture(GL_TEXTURE_2D, texture.id); @@ -51,9 +51,6 @@ Texture ImageLoader::loadPng(const std::string &file_path) glBindTexture(GL_TEXTURE_2D, 0); - texture.width = (int)width; - texture.height = (int)height; - return texture; } diff --git a/yage/base/sprite.cpp b/yage/base/sprite.cpp index 767e1000..9ac4dc55 100644 --- a/yage/base/sprite.cpp +++ b/yage/base/sprite.cpp @@ -15,8 +15,6 @@ namespace yage { -Sprite::Sprite() = default; - Sprite::~Sprite() { if (vbo_id_ != 0) { diff --git a/yage/base/sprite.h b/yage/base/sprite.h index 5b9baf91..725d2160 100644 --- a/yage/base/sprite.h +++ b/yage/base/sprite.h @@ -14,7 +14,7 @@ #include "texture.h" -#include <GL/glew.h> +#include <glad/glad.h> #include <string> @@ -34,7 +34,7 @@ private: Texture texture_; public: - Sprite(); + Sprite() = default; Sprite(const Sprite &) = delete; Sprite(Sprite &&) = delete; ~Sprite(); diff --git a/yage/base/spritebatch.h b/yage/base/spritebatch.h index 7235bd25..3b4aca76 100644 --- a/yage/base/spritebatch.h +++ b/yage/base/spritebatch.h @@ -6,12 +6,15 @@ * ---------------------------------------------------------------------------- */ +/** @file + */ + #ifndef YAGE_SPRITE_BATCH_H #define YAGE_SPRITE_BATCH_H #include "vertex.h" -#include <GL/glew.h> +#include <glad/glad.h> #include <glm/glm.hpp> #include <vector> diff --git a/yage/base/spritesheet.cpp b/yage/base/spritesheet.cpp new file mode 100644 index 00000000..748cdb5c --- /dev/null +++ b/yage/base/spritesheet.cpp @@ -0,0 +1,122 @@ +/* ---------------------------------------------------------------------------- + * spritesheet.cpp + * + * Copyright (c) 2017 Yann Herklotz Grave <ymherklotz@gmail.com> + * MIT License, see LICENSE file for more details. + * ---------------------------------------------------------------------------- + */ + +#include "spritesheet.h" + +namespace yage +{ + +namespace details +{ + +bool SpriteSheetHandler::Null() +{ + return true; +} + +bool SpriteSheetHandler::Bool(bool) +{ + return true; +} + +bool SpriteSheetHandler::Int(int i) +{ + return handleNumber(i); +} + +bool SpriteSheetHandler::Uint(unsigned u) +{ + return handleNumber(static_cast<int>(u)); +} + +bool SpriteSheetHandler::Int64(int64_t i) +{ + return handleNumber(static_cast<int>(i)); +} + +bool SpriteSheetHandler::Uint64(uint64_t u) +{ + return handleNumber(static_cast<int>(u)); +} + +bool SpriteSheetHandler::Double(double d) +{ + return handleNumber(static_cast<int>(d)); +} + +bool SpriteSheetHandler::String(const char *, rapidjson::SizeType, bool) +{ + return true; +} + +bool SpriteSheetHandler::Key(const char *str, rapidjson::SizeType length, bool) +{ + current_key_ = std::string(str, length); + return true; +} + +bool SpriteSheetHandler::StartObject() +{ + depth_++; + + if(depth_ == 3) { + current_image_ = current_key_; + } + + return true; +} + +bool SpriteSheetHandler::EndObject(rapidjson::SizeType) +{ + if(depth_ == 3) { + map_[current_image_] = coord_; + } + depth_--; + return true; +} + +bool SpriteSheetHandler::StartArray() +{ + return true; +} + +bool SpriteSheetHandler::EndArray(rapidjson::SizeType) +{ + return true; +} + +SpriteMap SpriteSheetHandler::spriteMap() const +{ + return map_; +} + +bool SpriteSheetHandler::handleNumber(int i) +{ + if(current_key_ == "width") { + if(depth_ == 1) { + image_width_ = i; + } else { + coord_.width = i; + } + } else if(current_key_ == "height") { + if(depth_ == 1) { + image_height_ = i; + } else { + coord_.height = i; + } + } else if(current_key_ == "x") { + coord_.x = i; + } else if(current_key_ == "y") { + coord_.y = i; + } + return true; +} + +} // namespace details + +} // namespace yage diff --git a/yage/base/spritesheet.h b/yage/base/spritesheet.h index 2b70ad8b..bc60f8b9 100644 --- a/yage/base/spritesheet.h +++ b/yage/base/spritesheet.h @@ -11,13 +11,78 @@ #include "texture.h" +#include <rapidjson/reader.h> + +#include <map> +#include <string> + namespace yage { +namespace details +{ + +struct Coordinate { + int x; + int y; + int width; + int height; + + Coordinate() = default; + + Coordinate(int x_i, int y_i, int width_i, int height_i) + : x(x_i), y(y_i), width(width_i), height(height_i) + { + } +}; + +typedef std::map<std::string, details::Coordinate> SpriteMap; + +class SpriteSheetHandler + : public rapidjson::BaseReaderHandler<rapidjson::UTF8<>, SpriteSheetHandler> +{ +public: + bool Null(); + bool Bool(bool b); + bool Int(int i); + bool Uint(unsigned u); + bool Int64(int64_t i); + bool Uint64(uint64_t u); + bool Double(double d); + bool String(const char *str, rapidjson::SizeType length, bool copy); + + bool Key(const char *str, rapidjson::SizeType length, bool copy); + bool StartObject(); + bool EndObject(rapidjson::SizeType memberCount); + bool StartArray(); + bool EndArray(rapidjson::SizeType memberCount); + + SpriteMap spriteMap() const; + +private: + std::string current_key_; + std::string current_image_; + Coordinate coord_; + int depth_; + int image_width_; + int image_height_; + SpriteMap map_; + + bool handleNumber(int i); +}; + +} // namespace details + class SpriteSheet { +public: + SpriteSheet(std::string pngFileName, std::string jsonFileName); + + void sprite(std::string spriteName) const; + private: - Texture texture_; + Texture texture_; + details::SpriteMap fileLocations_; }; } // namespace yage diff --git a/yage/base/texture.h b/yage/base/texture.h index d1fdcbf2..cc9dc857 100644 --- a/yage/base/texture.h +++ b/yage/base/texture.h @@ -9,7 +9,7 @@ #ifndef GL_TEXTURE_H #define GL_TEXTURE_H -#include <GL/glew.h> +#include <glad/glad.h> namespace yage { @@ -18,6 +18,11 @@ struct Texture { GLuint id; int width; int height; + + Texture(GLuint id_i, int width_i, int height_i) + : id(id_i), width(width_i), height(height_i) + { + } }; } // namespace yage diff --git a/yage/base/vertex.h b/yage/base/vertex.h index 15b46ed9..586e8190 100644 --- a/yage/base/vertex.h +++ b/yage/base/vertex.h @@ -9,7 +9,7 @@ #ifndef VERTEX_H #define VERTEX_H -#include <GL/glew.h> +#include <glad/glad.h> namespace yage { diff --git a/yage/base/window.cpp b/yage/base/window.cpp index a8b6fc02..67f32bb2 100644 --- a/yage/base/window.cpp +++ b/yage/base/window.cpp @@ -6,8 +6,7 @@ * ---------------------------------------------------------------------------- */ -#include <yage/base/window.h> -#include <GL/glew.h> +#include "window.h" #include <iostream> #include <stdexcept> @@ -19,60 +18,30 @@ Window::Window() = default; Window::~Window() { - SDL_DestroyWindow(window_); + glfwDestroyWindow(window_); } void Window::create(const std::string &window_name, int width, int height, unsigned flags) { - Uint32 gl_window_states = 0; + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); - // set the correct input flags - if (flags & WindowFlags::SHOWN) { - gl_window_states |= SDL_WINDOW_OPENGL; - } - if (flags & WindowFlags::HIDDEN) { - gl_window_states |= SDL_WINDOW_HIDDEN; - } - if (flags & WindowFlags::FULLSCREEN) { - gl_window_states |= SDL_WINDOW_FULLSCREEN; - } - if (flags & WindowFlags::BORDERLESS) { - gl_window_states |= SDL_WINDOW_BORDERLESS; - } - - // SDL_GL options - - // SDL_GL_SetAttribute (SDL_GL_CONTEXT_MAJOR_VERSION, 4); - // SDL_GL_SetAttribute (SDL_GL_CONTEXT_MINOR_VERSION, 5); - SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); - - // create the SDL window - window_ = SDL_CreateWindow(window_name.c_str(), SDL_WINDOWPOS_CENTERED, - SDL_WINDOWPOS_CENTERED, width, height, - gl_window_states); + window_ = glfwCreateWindow(width, height, window_name.c_str(), nullptr, nullptr); if (window_ == nullptr) { - throw std::runtime_error("SDL_CreateWindow failed"); + throw std::runtime_error("GLFW Window creation failed"); } - // initialize the GL context in the window - SDL_GLContext gl_context = SDL_GL_CreateContext(window_); - if (gl_context == nullptr) { - throw std::runtime_error("SDL_GL_CreateContext failed"); - } - - // initialize glew - GLenum error = glewInit(); - if (error != GLEW_OK) { - throw std::runtime_error("glewInit failed"); - } + // initialize the gl context + glfwMakeContextCurrent(window_); // print out the current OpenGL version to debug std::cout << "*** OpenGL version: " << glGetString(GL_VERSION) << " ***\n"; - // set vsync on instead of custom fps limiting - SDL_GL_SetSwapInterval(1); + // set vsync on + glfwSwapInterval(1); + // set the clear color to black glClearColor(0.f, 0.5f, 0.f, 1.f); // set alpha blending @@ -83,7 +52,7 @@ void Window::create(const std::string &window_name, int width, int height, void Window::swapBuffer() { // swap the window buffer - SDL_GL_SwapWindow(window_); + glfwSwapBuffers(window_); } void Window::clearBuffer() diff --git a/yage/base/window.h b/yage/base/window.h index 8639e075..eb4cf005 100644 --- a/yage/base/window.h +++ b/yage/base/window.h @@ -6,10 +6,13 @@ * ---------------------------------------------------------------------------- */ +/** @file + */ + #ifndef WINDOW_H #define WINDOW_H -#include <SDL2/SDL.h> +#include <GLFW/glfw3.h> #include <string> @@ -24,12 +27,12 @@ enum WindowFlags : unsigned { BORDERLESS = 0x8, }; -// window wrapper around SDL_Window pointer +// window wrapper around GLFWwindow pointer class Window { private: /// window handle - SDL_Window *window_ = nullptr; + GLFWwindow *window_ = nullptr; public: Window(); |