diff --git a/headers/enduro2d/core/render.hpp b/headers/enduro2d/core/render.hpp index 7c5736ea..c6c5654d 100644 --- a/headers/enduro2d/core/render.hpp +++ b/headers/enduro2d/core/render.hpp @@ -187,6 +187,8 @@ namespace e2d public: explicit texture(internal_state_uptr); ~texture() noexcept; + const v2u& size() const noexcept; + image_data_format format() const noexcept; private: internal_state_uptr state_; }; diff --git a/samples/sources/sample_00/sample_00.cpp b/samples/sources/sample_00/sample_00.cpp index 7088b22d..6572253d 100644 --- a/samples/sources/sample_00/sample_00.cpp +++ b/samples/sources/sample_00/sample_00.cpp @@ -70,9 +70,9 @@ namespace return {0, 1, 2, 2, 1, 3}; } - array generate_quad_vertices(f32 w, f32 h) noexcept { - f32 hw = w * 0.5f; - f32 hh = h * 0.5f; + array generate_quad_vertices(const v2u& size) noexcept { + f32 hw = size.x * 0.5f; + f32 hh = size.y * 0.5f; return { vertex1{{-hw, hh, 0.f}, {0, 1}}, vertex1{{-hw, -hh, 0.f}, {0, 0}}, @@ -127,7 +127,7 @@ int e2d_main() { index_declaration(index_declaration::index_type::unsigned_byte), index_buffer::usage::static_draw); - const auto vertices1 = generate_quad_vertices(66.f, 113.f); + const auto vertices1 = generate_quad_vertices(texture1->size()); const auto vertex_buffer1 = the().create_vertex_buffer( buffer(vertices1.data(), vertices1.size() * sizeof(vertices1[0])), vertex1::decl(), diff --git a/sources/enduro2d/core/render_impl/render_opengl.cpp b/sources/enduro2d/core/render_impl/render_opengl.cpp index 6879c30e..ffe90e0a 100644 --- a/sources/enduro2d/core/render_impl/render_opengl.cpp +++ b/sources/enduro2d/core/render_impl/render_opengl.cpp @@ -317,6 +317,14 @@ namespace e2d } texture::~texture() noexcept = default; + const v2u& texture::size() const noexcept { + return state_->size(); + } + + image_data_format texture::format() const noexcept { + return state_->format(); + } + // // index_buffer // @@ -446,7 +454,7 @@ namespace e2d } return std::make_shared( std::make_unique( - state_->dbg(), std::move(id))); + state_->dbg(), std::move(id), image.size(), image.format())); } texture_ptr render::create_texture(const input_stream_uptr& image_stream) { diff --git a/sources/enduro2d/core/render_impl/render_opengl_impl.cpp b/sources/enduro2d/core/render_impl/render_opengl_impl.cpp index 0ce15d55..75c15cc6 100644 --- a/sources/enduro2d/core/render_impl/render_opengl_impl.cpp +++ b/sources/enduro2d/core/render_impl/render_opengl_impl.cpp @@ -72,9 +72,15 @@ namespace e2d // texture::internal_state // - texture::internal_state::internal_state(debug& debug, gl_texture_id id) + texture::internal_state::internal_state( + debug& debug, + gl_texture_id id, + const v2u& size, + image_data_format format) : debug_(debug) - , id_(std::move(id)) { + , id_(std::move(id)) + , size_(size) + , format_(format){ E2D_ASSERT(!id_.empty()); } @@ -86,6 +92,14 @@ namespace e2d return id_; } + const v2u& texture::internal_state::size() const noexcept { + return size_; + } + + image_data_format texture::internal_state::format() const noexcept { + return format_; + } + // // index_buffer::internal_state // diff --git a/sources/enduro2d/core/render_impl/render_opengl_impl.hpp b/sources/enduro2d/core/render_impl/render_opengl_impl.hpp index 9dffb07a..a8fa0ab1 100644 --- a/sources/enduro2d/core/render_impl/render_opengl_impl.hpp +++ b/sources/enduro2d/core/render_impl/render_opengl_impl.hpp @@ -62,14 +62,20 @@ namespace e2d public: internal_state( debug& debug, - opengl::gl_texture_id id); + opengl::gl_texture_id id, + const v2u& size, + image_data_format format); ~internal_state() noexcept = default; public: debug& dbg() const noexcept; const opengl::gl_texture_id& id() const noexcept; + const v2u& size() const noexcept; + image_data_format format() const noexcept; private: debug& debug_; opengl::gl_texture_id id_; + v2u size_; + image_data_format format_; }; //