diff --git a/include/blt/gfx/renderer/batch_2d_renderer.h b/include/blt/gfx/renderer/batch_2d_renderer.h index dff200f..53eb826 100644 --- a/include/blt/gfx/renderer/batch_2d_renderer.h +++ b/include/blt/gfx/renderer/batch_2d_renderer.h @@ -19,11 +19,30 @@ #ifndef BLT_WITH_GRAPHICS_BATCH_2D_RENDERER_H #define BLT_WITH_GRAPHICS_BATCH_2D_RENDERER_H +#include "blt/gfx/model.h" +#include "blt/gfx/shader.h" + namespace blt::gfx { - - + struct rectangle + { + float x, y, width, height; + }; + + class batch_renderer_2d + { + private: + vertex_array* square_vao; + shader_t* shader; + public: + /** + * @param use_view_matrix should we use the view matrix when rendering? Defaults to false as the assumption is the view matrix is 3d + */ + void create(bool use_view_matrix = false); + void cleanup(); + }; + } #endif //BLT_WITH_GRAPHICS_BATCH_2D_RENDERER_H diff --git a/include/blt/gfx/renderer/texture_manager.h b/include/blt/gfx/renderer/resource_manager.h similarity index 80% rename from include/blt/gfx/renderer/texture_manager.h rename to include/blt/gfx/renderer/resource_manager.h index bb23534..f1e085a 100644 --- a/include/blt/gfx/renderer/texture_manager.h +++ b/include/blt/gfx/renderer/resource_manager.h @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -#ifndef BLT_WITH_GRAPHICS_TEXTURE_MANAGER_H -#define BLT_WITH_GRAPHICS_TEXTURE_MANAGER_H +#ifndef BLT_WITH_GRAPHICS_RESOURCE_MANAGER_H +#define BLT_WITH_GRAPHICS_RESOURCE_MANAGER_H #include #include @@ -38,7 +38,7 @@ namespace blt::gfx {} }; - class texture_resource_manager + class resource_manager { private: std::mutex load_lock; @@ -47,15 +47,20 @@ namespace blt::gfx std::vector loaded_textures; HASHMAP textures_2d; public: - texture_resource_manager() = default; + resource_manager() = default; void enqueue(std::string path, std::string name = ""); void load_resources(std::size_t threads = 8); - void delete_resources(); + inline texture_gl2D* get(const std::string& name) + { + return textures_2d[name]; + } + + void cleanup(); }; } -#endif //BLT_WITH_GRAPHICS_TEXTURE_MANAGER_H +#endif //BLT_WITH_GRAPHICS_RESOURCE_MANAGER_H diff --git a/libraries/BLT b/libraries/BLT index d913e95..d882b76 160000 --- a/libraries/BLT +++ b/libraries/BLT @@ -1 +1 @@ -Subproject commit d913e959658d9194be031b356bf815d766e06d80 +Subproject commit d882b76d83749273b05e71fb0361d8778cc6ad94 diff --git a/src/blt/gfx/renderer/batch_2d_renderer.cpp b/src/blt/gfx/renderer/batch_2d_renderer.cpp index 788763b..888aab7 100644 --- a/src/blt/gfx/renderer/batch_2d_renderer.cpp +++ b/src/blt/gfx/renderer/batch_2d_renderer.cpp @@ -17,7 +17,28 @@ */ #include +float square_vertices[20] = { + // positions // texture coords + 0.5f, 0.5f, 0.0f, 1.0f, 1.0f, // top right + 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, // bottom right + -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, // bottom left + -0.5f, 0.5f, 0.0f, 0.0f, 1.0f // top left +}; +const unsigned int square_indices[6] = { + 0, 1, 3, // first triangle + 1, 2, 3 // second triangle +}; + namespace blt::gfx { - + + void batch_renderer_2d::create(bool use_view_matrix) + { + + } + + void batch_renderer_2d::cleanup() + { + + } } \ No newline at end of file diff --git a/src/blt/gfx/renderer/texture_manager.cpp b/src/blt/gfx/renderer/resource_manager.cpp similarity index 80% rename from src/blt/gfx/renderer/texture_manager.cpp rename to src/blt/gfx/renderer/resource_manager.cpp index 216a985..89fc772 100644 --- a/src/blt/gfx/renderer/texture_manager.cpp +++ b/src/blt/gfx/renderer/resource_manager.cpp @@ -15,39 +15,41 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#include +#include #include namespace blt::gfx { - void texture_resource_manager::delete_resources() + void resource_manager::cleanup() { for (const auto& p : textures_2d) delete p.second; } - void texture_resource_manager::enqueue(std::string path, std::string name) + void resource_manager::enqueue(std::string path, std::string name) { textures_to_load.emplace_back(std::move(path), std::move(name)); } - void texture_resource_manager::load_resources(std::size_t threads) + void resource_manager::load_resources(std::size_t threads) { - blt::thread_pool pool; - pool.execute([&]() { + blt::thread_pool pool{threads, [&]() { loadable_texture texture; { std::scoped_lock lock(load_lock); + if (textures_to_load.empty()) + return; texture = textures_to_load.back(); textures_to_load.pop_back(); } + BLT_DEBUG("Loading texture file %s", texture.path.c_str()); auto* file = new texture_file(texture.path, texture.name); { std::scoped_lock lock(save_lock); loaded_textures.push_back(file); } - }); + }}; do { std::this_thread::sleep_for(std::chrono::milliseconds(100)); @@ -62,7 +64,7 @@ namespace blt::gfx { auto* back = loaded_textures.back(); textures_2d.insert({back->getName(), new texture_gl2D(back->texture())}); - BLT_DEBUG("Loaded Texture %s", back->getName().c_str()); + BLT_DEBUG("Loaded Texture '%s'", back->getName().c_str()); delete back; loaded_textures.pop_back(); } @@ -74,6 +76,7 @@ namespace blt::gfx { auto* back = loaded_textures.back(); textures_2d.insert({back->getName(), new texture_gl2D(back->texture())}); + BLT_DEBUG("Loaded texture '%s'", back->getName().c_str()); loaded_textures.pop_back(); } } diff --git a/tests/include/shaders/test.vert b/tests/include/shaders/test.vert index 52961c9..0d51994 100644 --- a/tests/include/shaders/test.vert +++ b/tests/include/shaders/test.vert @@ -23,7 +23,7 @@ uniform mat4 model; void main() { //gl_Position = projection * view * vec4(vertex.x, vertex.y, vertex.z, 1.0); - gl_Position = ovm * model * vec4(vertex, 1.0); + gl_Position = ortho * model * vec4(vertex, 1.0); pos = vertex.xy; uv = uv_in; } diff --git a/tests/src/main.cpp b/tests/src/main.cpp index c380021..2947229 100644 --- a/tests/src/main.cpp +++ b/tests/src/main.cpp @@ -9,36 +9,13 @@ #include #include +#include "blt/gfx/renderer/resource_manager.h" -const float raw_vertices[18] = { - // first triangle - 0.5f, 0.5f, 0.0f, // top right - 0.5f, -0.5f, 0.0f, // bottom right - -0.5f, 0.5f, 0.0f, // top left - // second triangle - 0.5f, -0.5f, 0.0f, // bottom right - -0.5f, -0.5f, 0.0f, // bottom left - -0.5f, 0.5f, 0.0f // top left -}; - -float vertices[20] = { - // positions // texture coords - 0.5f, 0.5f, 0.0f, 1.0f, 1.0f, // top right - 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, // bottom right - -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, // bottom left - -0.5f, 0.5f, 0.0f, 0.0f, 1.0f // top left -}; -const unsigned int indices[6] = { // note that we start from 0! - 0, 1, 3, // first triangle - 1, 2, 3 // second triangle -}; - blt::gfx::vertex_array* vao; blt::gfx::shader_t* shader; -blt::gfx::texture_gl2D* texture; -blt::gfx::texture_gl2D* parker_texture; blt::gfx::matrix_state_manager global_matrices; +blt::gfx::resource_manager resources; float x = 0, y = 0, z = 0; float bx = 500, by = 500; float mx = 0, my = -9.8; @@ -104,10 +81,11 @@ void init() shader->bindAttribute(0, "vertex"); shader->bindAttribute(1, "uv_in"); - texture = new texture_gl2D(texture_file("../resources/textures/cumdollar.jpg").texture()); - parker_texture = new texture_gl2D(texture_file("../resources/textures/dfoedbi-28157978-1555-45c3-b2f4-d5e5fe25b253.png").texture()); + resources.enqueue("../resources/textures/cumdollar.jpg", "ibuythat"); + resources.enqueue("../resources/textures/dfoedbi-28157978-1555-45c3-b2f4-d5e5fe25b253.png", "niko"); global_matrices.create_internals(); + resources.load_resources(); } void update(std::int32_t width, std::int32_t height) @@ -128,10 +106,10 @@ void update(std::int32_t width, std::int32_t height) const float w = 120, h = 120, cf = 30, rf = 15, crf = 10; glActiveTexture(GL_TEXTURE0); - parker_texture->bind(); + resources.get("ibuythat")->bind(); draw(width / 2.0, height / 2.0, width, height, 90); - texture->bind(); + resources.get("niko")->bind(); draw(bx, by, w, h, 0); bx += mx * blt::gfx::getFrameDeltaSeconds() * cf; @@ -160,8 +138,8 @@ int main() blt::gfx::init(blt::gfx::window_data{"My Sexy Window", init, update}.setSyncInterval(1)); delete vao; delete shader; - delete texture; global_matrices.cleanup(); + resources.cleanup(); blt::gfx::cleanup(); return 0; }