From 315c60e4a664590cd3c14f1544cfd3973c73e78a Mon Sep 17 00:00:00 2001 From: zhenyan121 <104683324+zhenyan121@users.noreply.github.com> Date: Thu, 30 Apr 2026 11:53:35 +0800 Subject: [PATCH] feat: block switching (#2) * feat: add item tab item in dev panel * feat: add block switching via mouse wheel --- assets/texture/item/block/air.png | Bin 0 -> 99 bytes assets/texture/item/block/dirt.png | Bin 0 -> 882 bytes assets/texture/item/block/grass_block.png | Bin 0 -> 499 bytes assets/texture/item/block/leaf.png | Bin 0 -> 890 bytes assets/texture/item/block/log.png | Bin 0 -> 874 bytes assets/texture/item/block/sand.png | Bin 0 -> 877 bytes assets/texture/item/block/stone.png | Bin 0 -> 915 bytes include/Cubed/dev_panel.hpp | 1 + include/Cubed/gameplay/player.hpp | 5 + include/Cubed/map_table.hpp | 11 +- include/Cubed/texture_manager.hpp | 8 ++ src/dev_panel.cpp | 33 +++++ src/gameplay/player.cpp | 18 ++- src/map_table.cpp | 16 ++- src/texture_manager.cpp | 158 +++++++++++++--------- src/tools/shader_tools.cpp | 1 - 16 files changed, 176 insertions(+), 75 deletions(-) create mode 100644 assets/texture/item/block/air.png create mode 100644 assets/texture/item/block/dirt.png create mode 100644 assets/texture/item/block/grass_block.png create mode 100644 assets/texture/item/block/leaf.png create mode 100644 assets/texture/item/block/log.png create mode 100644 assets/texture/item/block/sand.png create mode 100644 assets/texture/item/block/stone.png diff --git a/assets/texture/item/block/air.png b/assets/texture/item/block/air.png new file mode 100644 index 0000000000000000000000000000000000000000..956a02920eca9faf43d090434b5689233c74eaa1 GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|WIbIRLo9le vZEAm?uV>?85LTV#&MRS>aHZj33IoHhM&^Snj9FuV3K=|I{an^LB{Ts5Jun%7 literal 0 HcmV?d00001 diff --git a/assets/texture/item/block/dirt.png b/assets/texture/item/block/dirt.png new file mode 100644 index 0000000000000000000000000000000000000000..b630af835eb84079e35a3509092685dec097297a GIT binary patch literal 882 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jPR!=VeS?7NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrT$; z@J#ddWzYh$C4krih#BED6QdLZ$V89`2ctBc4RQ~|go^ijfD~uGn_Dr64+giiww(hq zI14-?fr8vZAk28_ZrvZCpm~XFM2TBwPAY?bMt*LpepN3}d45s0eo{_q zUP@|Fa%oa(ivF`XtDa8W`*cFD9$1*+hh;6$2nmo8E{P?n3`PbyBqVkh=|2C5MNsR_x;VPTMP5ZJ8&DDU*W3?lkPc(`{m6mia98jE~G6u=Uehi{$oL(oIN*a zF(!SP{NZ|LG0&sJvQ8ByAfy@cu2%3CO#`5 zGVBXuQK8V5d$r-;Wtt8Pp6T-G2xjPx$tw}^dR5*>rlCf{oP!Ps{XPee_aAOjuxOfO88%w)(=v1joH`Yq9z=HTA`ai(H z%D_}Xr!GjHS<6zUAVq50w4qWP6E|rbAA=RAk|`VFo8G(o?z`{aJNTDae`VB7au89xrYOnzneen)Xbp&Sa=5!9Q@pzz||Y%J@x9p4X7Jp~}@fQZoV zq*!j&u-(dXgMOEygS`r>O05=P?^ba`!Mv|DSC^?b1FBzq0P4*EbFY#MN@IK*u z?I(@b0ljaa3ccPLzW)$3YjVsDUdbp52m%UAUww`bZeSxD)84HzkOTxg$KWzf8I36l z09?i?o?~EJ0tXem1%qJ%wv{=&ij}fs0JGJ|y(o(37!1eC{5>)eVBUh^SZQo-=l?FZ z)+ZNuP%^Q+CG0t2lw^cq0#|Vg!1w)+lpV>N6&7iVjmN$M`9qDykgBpUC#YtHpO1QS pr@$1?p4N0m5NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrT$; z@J#ddWzYh$C4krih#BED6QdLZ$V89`2ctBc4RQ~|go^ijfD~uGn_Dr64+giiww(hq zI14-?fr8vZAk28_ZrvZCpm~XFM2TBwPAY?bMt*LpepN3}d45s0eo{_q zUP@|Fa%oa(ivF`XtDa8W`*cFD9$1*+hh;6$2nmo8E{P?n3`Pbju(n#p5J+?@7$$lA52pJF}rWsFEDlX9z&1SQ>}_( zJWoD5*S5#D?b3>G=^sv;U3U*!Z#m^^srw9@7i~@Ef_LW6QoJXc>7XZm)X!&23TMTp z{VwMYYgSF_bh*jwpP1oUwN_x&rNU@K$F(;mp0R6mi<5Way!CL#g{h7z@&D8FlkKOP zs3jb+%U)XTnODuQTOc8za7mWN-s@7Q?q2OyyCtu>pk)6(_RUHwr&zw&$Nbo1+k?i6 z75fCri{@Qp+EeT=qL84}d)w)J@2kzn)=W7f^5W>*)cAdNi*AJ+U(2#*gMXESz5ti% z<*X{f1_|XWuOu}VxtAT~60!_`{_eV=l|*OYM&`9%_8NEBz4x!4?8)s|t&;kq!S9O4 zwoRMVKB%oXWAir q%n?rx_PtpzGu5dfcFqZ<*X)e{_xbNS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrT$; z@J#ddWzYh$C4krih#BED6QdLZ$V89`2ctBc4RQ~|go^ijfD~uGn_Dr64+giiww(hq zI14-?fr8vZAk28_ZrvZCpm~XFM2TBwPAY?bMt*LpepN3}d45s0eo{_q zUP@|Fa%oa(ivF`XtDa8W`*cFD9$1*+hh;6$2nmo8E{P?n3`PbyET%#hl5%9(NzFWM?gKSpK6n zltr}aye%ug>9or?VqDs@%Hle|Dz{7(Ry+A_pBj&<&8d^kMiEiktB*!bJ3Z z&HIL4XUXkcM?Mrko6hm~x7Jk$Ri9nbnyZZ%CbftidOT^5nd9OsGLGfbRzwBe6`GL5 z(KaP@>QvS*>uy$lws`-8Yvtt~J2zC=n8YS+o@+B_er5Dr#p|yObDd5k*uHpj)93f^ ZFT4`*6YofEVFx8522WQ%mvv4FO#mm^I%NO= literal 0 HcmV?d00001 diff --git a/assets/texture/item/block/sand.png b/assets/texture/item/block/sand.png new file mode 100644 index 0000000000000000000000000000000000000000..a5083fee3c719b7ba6ecac2222fb6b68d8d43095 GIT binary patch literal 877 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jPR!=VeS?7NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrT$; z@J#ddWzYh$C4krih#BED6QdLZ$V89`2ctBc4RQ~|go^ijfD~uGn_Dr64+giiww(hq zI14-?fr8vZAk28_ZrvZCpm~XFM2TBwPAY?bMt*LpepN3}d45s0eo{_q zUP@|Fa%oa(ivF`XtDa8W`*cFD9$1*+hh;6$2nmo8E{P?n3`PbSq~XCpQ6-=tFG$cCC{~on z0HHGezkdmo;08$qC#UA6GJwgaim}sx!oncoAh25z*610SERUKM0Sv1do-U3d7J|J& zyZsJ32;BM1-099-8NfcFV}E0a;2*X{ZEbCn+NLo{NlB?>{bT58VcGBC;M8EuCk^Zty@q zxj`)Wd*dF*{yi%#8yz`CVr6ozqx%%rTst{UY-#uP_gtOv*#W1HD!9mXEl`@%zeS&Q zm$y~zujIICt`v%@`uk4K!GzeTBY1+YA0_$N4l%i6X4jGM^0DVnw2+#M4i zT5(Ivdz#0PbwFc^!t`&+Gu`vlC$(j0vD`?g;PANmft&TjQs#XNZ*?u1^dn5slJQ^D zsZA%2#i^aY>~8K7u(CVG{hXNToYwQtt0%U$#H23dNV$30*DhgOb3;;Z{;EeV?`BxH zTzopr0L(c$g8%>k literal 0 HcmV?d00001 diff --git a/assets/texture/item/block/stone.png b/assets/texture/item/block/stone.png new file mode 100644 index 0000000000000000000000000000000000000000..ec16393abe5b5cc28cb5d09111a398bb5a9cc643 GIT binary patch literal 915 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jPR!=VeS?7NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrT$; z@J#ddWzYh$C4krih#BED6QdLZ$V89`2ctBc4RQ~|go^ijfD~uGn_Dr64+giiww(hq zI14-?fr8vZAk28_ZrvZCpm~XFM2TBwPAY?bMt*LpepN3}d45s0eo{_q zUP@|Fa%oa(ivF`XtDa8W`*cFD9$1*+hh;6$2nmo8E{P?n3`Pb#flOc zAXLWx_b-7G+#reIRJ8a)Fu&ye3Gz_8lq>Eak-A=n#q z+E3b1K*w2cqyO%-!>0>6Q(8VVu+Lu4(D#A&1N%b<7V$dOf1*teof{5z?nue~Q2agR ze!`0^8|7r3ge6zcl!TXtU+4R9Y^sNfNalC*i)QBA&wM-ASIPM&qKswZ?(ONz?9M#; z^Tow@Wr)}JpqI~$_i(?FmzimwzJG%Ln#b=`CFi|A%%3JuD#fuxB6)8dzm8c<#v!x) z>%vSb%kv*BuVuNsdB?hGhBIOk&Y~%3G};_d_LbKK1udo4g`S@4)^CzGrtZt!i-8T;n-A z@%swth3a!N(-uY?nLE>Ad8zW^P?>9*KXloOYEO!rcy4-Led6?;oC`T-Q_eiJ)N_Bh zoVDV?qB9XO{D-AB?L6PHIKpFl#8jn+{{ut?(?8l+vufY(`oQM4Y|{ISc~@eWubQD@ z)NwsN>-?VGOeWoK5#O6%TE6uV&HSi5dFJ)<12(+dPTQ(T-?(wZh`U>|`s& #include - +#include namespace Cubed { class MapTable { private: - static std::unordered_map id_to_name_map; - static std::unordered_map name_to_id_map; + static inline std::unordered_map id_to_name_map; + static inline std::unordered_map name_to_id_map; + static inline std::vector item_id_to_name; public: // please using reference - static const std::string& get_name_from_id(unsigned id); + static std::string_view get_name_from_id(unsigned id); static unsigned get_id_from_name(const std::string& name); + static std::string_view item_name(unsigned id); + static const std::vector& item_map(); static void init_map(); }; diff --git a/include/Cubed/texture_manager.hpp b/include/Cubed/texture_manager.hpp index 63e845a..f0d4c50 100644 --- a/include/Cubed/texture_manager.hpp +++ b/include/Cubed/texture_manager.hpp @@ -13,9 +13,16 @@ private: GLuint m_ui_array; GLfloat m_max_aniso = 0.0f; int m_aniso = 1; + + std::vector m_item_textures; void load_block_status(unsigned status_id); void load_block_texture(unsigned block_id); + void load_item_texture(const std::string& name); void load_ui_texture(unsigned id); + void init_item(); + void init_block(); + void init_ui(); + void init_block_status(); public: TextureManager(); @@ -25,6 +32,7 @@ public: GLuint get_block_status_array() const; GLuint get_texture_array() const; GLuint get_ui_array() const; + const std::vector& item_textures() const; // Must call after MapTable::init_map() and glfwMakeContextCurrent(window); void init_texture(); void hot_reload(); diff --git a/src/dev_panel.cpp b/src/dev_panel.cpp index 32707c5..65f2cfd 100644 --- a/src/dev_panel.cpp +++ b/src/dev_panel.cpp @@ -3,6 +3,7 @@ #include "Cubed/app.hpp" #include "Cubed/config.hpp" #include "Cubed/gameplay/player.hpp" +#include "Cubed/map_table.hpp" #include "Cubed/tools/log.hpp" #include @@ -72,7 +73,9 @@ void DevPanel::render() { show_settings_tab_item(); show_world_tab_item(); show_player_tab_item(); + show_items_tab_item(); show_about_table_bar(); + ImGui::EndTabBar(); } ImGui::End(); @@ -437,6 +440,36 @@ void DevPanel::show_player_tab_item() { ImGui::EndTabItem(); } } + +void DevPanel::show_items_tab_item() { + auto& textures = m_app.texture_manager().item_textures(); + auto& names = MapTable::item_map(); + if (ImGui::BeginTabItem("item")) { + ImGui::Text("Place Block "); + ImGui::SameLine(); + ImGui::Image(static_cast(static_cast( + textures[m_player->place_block()])), + ImVec2{48, 48}); + for (size_t i = 1; i < textures.size(); i++) { + if (ImGui::ImageButton(("##item" + std::to_string(i)).c_str(), + static_cast( + static_cast(textures[i])), + ImVec2{48, 48})) { + m_player->set_place_block(i); + } + if (ImGui::IsItemHovered()) { + ImGui::BeginTooltip(); + ImGui::Text("%s", names[i].c_str()); + ImGui::EndTooltip(); + } + if (i % 10 != 0) { + ImGui::SameLine(); + } + } + ImGui::EndTabItem(); + } +} + void DevPanel::update_config_view() { auto config = Config::get(); m_config.fov = diff --git a/src/gameplay/player.cpp b/src/gameplay/player.cpp index c3bed54..ab5dd5c 100644 --- a/src/gameplay/player.cpp +++ b/src/gameplay/player.cpp @@ -134,6 +134,8 @@ void Player::hot_reload() { void Player::set_player_pos(const glm::vec3& pos) { m_player_pos = pos; } +void Player::set_place_block(unsigned id) { m_place_block = id; } + void Player::update(float delta_time) { update_move(delta_time); @@ -320,7 +322,7 @@ void Player::update_lookup_block() { static_cast(z + 1)}}; AABB player_box = get_aabb(); if (!player_box.intersects(block_box)) { - m_world.set_block(near_pos, 1); + m_world.set_block(near_pos, m_place_block); } } Input::get_input_state().mouse_state.right = false; @@ -524,6 +526,19 @@ void Player::update_scroll(double yoffset) { } } } + if (m_game_mode == CREATIVE) { + if (yoffset < 0) { + m_place_block += 1; + if (m_place_block >= MAX_BLOCK_NUM) { + m_place_block = 1; + } + } else { + m_place_block -= 1; + if (m_place_block <= 0) { + m_place_block = MAX_BLOCK_NUM - 1; + } + } + } } float& Player::max_walk_speed() { return m_max_walk_speed; } @@ -532,6 +547,7 @@ float& Player::max_speed() { return m_max_speed; } float& Player::acceleration() { return m_acceleration; } float& Player::deceleration() { return m_deceleration; } float& Player::g() { return m_g; } +unsigned Player::place_block() const { return m_place_block; }; Gait& Player::gait() { return m_gait; } GameMode& Player::game_mode() { return m_game_mode; } diff --git a/src/map_table.cpp b/src/map_table.cpp index 4a26837..92b41fe 100644 --- a/src/map_table.cpp +++ b/src/map_table.cpp @@ -6,21 +6,26 @@ namespace Cubed { -std::unordered_map MapTable::id_to_name_map; -std::unordered_map MapTable::name_to_id_map; - -const std::string& MapTable::get_name_from_id(unsigned id) { +std::string_view MapTable::get_name_from_id(unsigned id) { auto it = id_to_name_map.find(id); ASSERT_MSG(it != id_to_name_map.end(), "Id: " + std::to_string(id) + " is not exist"); return it->second; } + unsigned MapTable::get_id_from_name(const std::string& name) { auto it = name_to_id_map.find(HASH::str(name)); ASSERT_MSG(it != name_to_id_map.end(), "Name " + name + " is not exist"); return it->second; } +std::string_view MapTable::item_name(unsigned id) { + ASSERT_MSG(id < item_id_to_name.size(), "ID is invalid"); + return item_id_to_name[id]; +} + +const std::vector& MapTable::item_map() { return item_id_to_name; } + void MapTable::init_map() { id_to_name_map.reserve(MAX_BLOCK_NUM); name_to_id_map.reserve(MAX_BLOCK_NUM); @@ -29,6 +34,9 @@ void MapTable::init_map() { id_to_name_map[i] = BLOCK_REISTER[i]; name_to_id_map[HASH::str(BLOCK_REISTER[i])] = i; } + for (auto s : BLOCK_REISTER) { + item_id_to_name.emplace_back(s); + } } } // namespace Cubed diff --git a/src/texture_manager.cpp b/src/texture_manager.cpp index 662ee85..5802bd4 100644 --- a/src/texture_manager.cpp +++ b/src/texture_manager.cpp @@ -16,6 +16,9 @@ TextureManager::~TextureManager() { delet_texture(); } void TextureManager::delet_texture() { glDeleteTextures(1, &m_texture_array); glDeleteTextures(1, &m_block_status_array); + for (auto& id : m_item_textures) { + glDeleteTextures(1, &id); + } Logger::info("Successfully delete all texture"); } @@ -27,6 +30,10 @@ GLuint TextureManager::get_texture_array() const { return m_texture_array; } GLuint TextureManager::get_ui_array() const { return m_ui_array; } +const std::vector& TextureManager::item_textures() const { + return m_item_textures; +} + void TextureManager::load_block_status(unsigned id) { ASSERT_MSG(id < MAX_BLOCK_STATUS, "Exceed the max status sum limit"); @@ -41,7 +48,7 @@ void TextureManager::load_block_status(unsigned id) { void TextureManager::load_block_texture(unsigned id) { ASSERT_MSG(id < MAX_BLOCK_NUM, "Exceed the max block sum limit"); - const std::string& name = MapTable::get_name_from_id(id); + std::string name{MapTable::get_name_from_id(id)}; // air don`t need texture if (id == 0) { return; @@ -66,6 +73,28 @@ void TextureManager::load_block_texture(unsigned id) { } } +void TextureManager::load_item_texture(const std::string& name) { + std::string path = "texture/item/block/" + name + ".png"; + unsigned char* data = nullptr; + data = Tools::load_image_data(path); + GLuint texture; + glGenTextures(1, &texture); + glBindTexture(GL_TEXTURE_2D, texture); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 16, 16, 0, GL_RGBA, + GL_UNSIGNED_BYTE, data); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_LINEAR); + glGenerateMipmap(GL_TEXTURE_2D); + if (m_aniso >= 1) { + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY, + static_cast(m_aniso)); + } + m_item_textures.push_back(texture); + Tools::delete_image_data(data); +} + void TextureManager::load_ui_texture(unsigned id) { ASSERT_MSG(id < MAX_UI_NUM, "Exceed the max ui sum limit"); @@ -78,6 +107,65 @@ void TextureManager::load_ui_texture(unsigned id) { Tools::delete_image_data(image_data); } +void TextureManager::init_item() { + auto& map = MapTable::item_map(); + for (const auto& name : map) { + load_item_texture(name); + } +} +void TextureManager::init_block() { + glGenTextures(1, &m_texture_array); + glBindTexture(GL_TEXTURE_2D_ARRAY, m_texture_array); + glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 16, 16, MAX_BLOCK_NUM * 6, 0, + GL_RGBA, GL_UNSIGNED_BYTE, nullptr); + for (int i = 0; i < MAX_BLOCK_NUM; i++) { + load_block_texture(i); + } + + glBindTexture(GL_TEXTURE_2D_ARRAY, m_texture_array); + glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_LINEAR); + glGenerateMipmap(GL_TEXTURE_2D_ARRAY); + if (m_aniso >= 1) { + glTexParameterf(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAX_ANISOTROPY, + static_cast(m_aniso)); + } + Logger::info("Block Texture Load Success"); +} +void TextureManager::init_ui() { + glGenTextures(1, &m_ui_array); + glBindTexture(GL_TEXTURE_2D_ARRAY, m_ui_array); + glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 16, 16, MAX_UI_NUM, 0, + GL_RGBA, GL_UNSIGNED_BYTE, nullptr); + for (int i = 0; i < MAX_UI_NUM; i++) { + load_ui_texture(i); + } + + glBindTexture(GL_TEXTURE_2D_ARRAY, m_ui_array); + glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_NEAREST); +} +void TextureManager::init_block_status() { + glGenTextures(1, &m_block_status_array); + glBindTexture(GL_TEXTURE_2D_ARRAY, m_block_status_array); + glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 16, 16, MAX_BLOCK_STATUS, 0, + GL_RGBA, GL_UNSIGNED_BYTE, nullptr); + for (int i = 0; i < MAX_BLOCK_STATUS; i++) { + load_block_status(i); + } + + glBindTexture(GL_TEXTURE_2D_ARRAY, m_block_status_array); + glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_LINEAR); + glGenerateMipmap(GL_TEXTURE_2D_ARRAY); + + if (m_aniso >= 1) { + glTexParameterf(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAX_ANISOTROPY, + static_cast(m_aniso)); + } +} void TextureManager::init_texture() { glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY, &m_max_aniso); if (m_max_aniso > 0.0f) { @@ -89,71 +177,11 @@ void TextureManager::init_texture() { Logger::info("Setting Texture Aniso is {}", m_aniso); MapTable::init_map(); Logger::info("Map Init Success"); - glGenTextures(1, &m_texture_array); - Tools::check_opengl_error(); - glBindTexture(GL_TEXTURE_2D_ARRAY, m_texture_array); - Tools::check_opengl_error(); - glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 16, 16, MAX_BLOCK_NUM * 6, 0, - GL_RGBA, GL_UNSIGNED_BYTE, nullptr); - Tools::check_opengl_error(); - for (int i = 0; i < MAX_BLOCK_NUM; i++) { - load_block_texture(i); - } - Logger::info("Block Texture Load Success"); - glBindTexture(GL_TEXTURE_2D_ARRAY, m_texture_array); - Tools::check_opengl_error(); - glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - Tools::check_opengl_error(); - glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, - GL_LINEAR_MIPMAP_LINEAR); - Tools::check_opengl_error(); - glGenerateMipmap(GL_TEXTURE_2D_ARRAY); - Tools::check_opengl_error(); - if (m_aniso >= 1) { - glTexParameterf(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAX_ANISOTROPY, - static_cast(m_aniso)); - } - glGenTextures(1, &m_block_status_array); - Tools::check_opengl_error(); - glBindTexture(GL_TEXTURE_2D_ARRAY, m_block_status_array); - Tools::check_opengl_error(); - glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 16, 16, MAX_BLOCK_STATUS, 0, - GL_RGBA, GL_UNSIGNED_BYTE, nullptr); - Tools::check_opengl_error(); - for (int i = 0; i < MAX_BLOCK_STATUS; i++) { - load_block_status(i); - } - - glBindTexture(GL_TEXTURE_2D_ARRAY, m_block_status_array); - Tools::check_opengl_error(); - glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - Tools::check_opengl_error(); - glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, - GL_LINEAR_MIPMAP_LINEAR); - Tools::check_opengl_error(); - glGenerateMipmap(GL_TEXTURE_2D_ARRAY); - Tools::check_opengl_error(); - - if (m_aniso >= 1) { - glTexParameterf(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAX_ANISOTROPY, - static_cast(m_aniso)); - } - - glGenTextures(1, &m_ui_array); - Tools::check_opengl_error(); - glBindTexture(GL_TEXTURE_2D_ARRAY, m_ui_array); - Tools::check_opengl_error(); - glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 16, 16, MAX_UI_NUM, 0, - GL_RGBA, GL_UNSIGNED_BYTE, nullptr); - Tools::check_opengl_error(); - for (int i = 0; i < MAX_UI_NUM; i++) { - load_ui_texture(i); - } - - glBindTexture(GL_TEXTURE_2D_ARRAY, m_ui_array); - glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + init_block(); + init_block_status(); + init_ui(); + init_item(); } void TextureManager::update() { diff --git a/src/tools/shader_tools.cpp b/src/tools/shader_tools.cpp index f408114..68ceaab 100644 --- a/src/tools/shader_tools.cpp +++ b/src/tools/shader_tools.cpp @@ -1,6 +1,5 @@ #include "Cubed/tools/shader_tools.hpp" -#include "Cubed/config.hpp" #include "Cubed/tools/cubed_assert.hpp" #include "Cubed/tools/log.hpp"