texture loading
parent
8c86faf1ce
commit
e37fc6b321
|
@ -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
|
||||
|
|
|
@ -16,8 +16,8 @@
|
|||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#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 <blt/std/hashmap.h>
|
||||
#include <blt/gfx/texture.h>
|
||||
|
@ -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<texture_file*> loaded_textures;
|
||||
HASHMAP<std::string, texture_gl2D*> 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
|
|
@ -1 +1 @@
|
|||
Subproject commit d913e959658d9194be031b356bf815d766e06d80
|
||||
Subproject commit d882b76d83749273b05e71fb0361d8778cc6ad94
|
|
@ -17,7 +17,28 @@
|
|||
*/
|
||||
#include <blt/gfx/renderer/batch_2d_renderer.h>
|
||||
|
||||
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()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
|
@ -15,39 +15,41 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <blt/gfx/renderer/texture_manager.h>
|
||||
#include <blt/gfx/renderer/resource_manager.h>
|
||||
#include <blt/std/logging.h>
|
||||
|
||||
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<false> pool;
|
||||
pool.execute([&]() {
|
||||
blt::thread_pool<false> 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();
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -9,36 +9,13 @@
|
|||
|
||||
#include <shaders/test.vert>
|
||||
#include <shaders/test.frag>
|
||||
#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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue