mirror of
https://github.com/zhenyan121/Cubed.git
synced 2026-06-17 16:17:02 +08:00
feat: add texture hot-reload
This commit is contained in:
16
src/app.cpp
16
src/app.cpp
@@ -19,7 +19,10 @@ App::~App() {
|
||||
void App::cursor_position_callback(GLFWwindow* window, double xpos, double ypos) {
|
||||
App* app = static_cast<App*>(glfwGetWindowUserPointer(window));
|
||||
CUBED_ASSERT_MSG(app, "nullptr");
|
||||
app->m_camera.update_cursor_position_camera(xpos, ypos);
|
||||
if (!app->m_window.is_mouse_enable()) {
|
||||
app->m_camera.update_cursor_position_camera(xpos, ypos);
|
||||
}
|
||||
|
||||
}
|
||||
void App::init() {
|
||||
m_window.init();
|
||||
@@ -45,7 +48,6 @@ void App::init() {
|
||||
Logger::info("Texture Load Success");
|
||||
m_world.init_world();
|
||||
Logger::info("World Init Success");
|
||||
m_texture_array = m_texture_manager.get_texture_array();
|
||||
|
||||
m_camera.camera_init(&m_world.get_player("TestPlayer"));
|
||||
|
||||
@@ -54,7 +56,7 @@ void App::init() {
|
||||
void App::key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) {
|
||||
App* app = static_cast<App*>(glfwGetWindowUserPointer(window));
|
||||
CUBED_ASSERT_MSG(app, "nullptr");
|
||||
|
||||
auto& input = Input::get_input_state();
|
||||
switch(key) {
|
||||
case GLFW_KEY_Q:
|
||||
if (action == GLFW_PRESS) {
|
||||
@@ -78,7 +80,12 @@ void App::key_callback(GLFWwindow* window, int key, int scancode, int action, in
|
||||
break;
|
||||
case GLFW_KEY_R:
|
||||
if (action == GLFW_PRESS) {
|
||||
app->m_world.need_gen();
|
||||
app->m_texture_manager.need_reload();
|
||||
}
|
||||
break;
|
||||
case GLFW_KEY_P:
|
||||
if (action == GLFW_PRESS) {
|
||||
app->m_window.toggle_mouse_able();
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -159,6 +166,7 @@ void App::update() {
|
||||
frame_count = 0;
|
||||
fps_time_count = 0.0f;
|
||||
}
|
||||
m_texture_manager.update();
|
||||
m_world.update(delta_time);
|
||||
m_camera.update_move_camera();
|
||||
const auto& player= m_world.get_player("TestPlayer");
|
||||
|
||||
@@ -31,7 +31,7 @@ void MapTable::init_map() {
|
||||
|
||||
for (int i = 0; i < MAX_BLOCK_NUM; i++) {
|
||||
id_to_name_map[i] = BLOCK_REISTER[i];
|
||||
name_to_id_map[HASH::str(BLOCK_REISTER[i])] = i;
|
||||
name_to_id_map[HASH::str(BLOCK_REISTER[i])] = i;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -178,4 +178,20 @@ void TextureManager::init_texture() {
|
||||
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
|
||||
|
||||
}
|
||||
|
||||
void TextureManager::update() {
|
||||
if (m_need_reload) {
|
||||
hot_reload();
|
||||
}
|
||||
}
|
||||
|
||||
void TextureManager::need_reload() {
|
||||
m_need_reload = true;
|
||||
}
|
||||
|
||||
void TextureManager::hot_reload() {
|
||||
delet_texture();
|
||||
init_texture();
|
||||
m_need_reload = false;
|
||||
}
|
||||
@@ -19,6 +19,10 @@ Window::~Window() {
|
||||
glfwTerminate();
|
||||
}
|
||||
|
||||
bool Window::is_mouse_enable() const {
|
||||
return m_mouse_enable;
|
||||
}
|
||||
|
||||
const GLFWwindow* Window::get_glfw_window() const {
|
||||
return m_window;
|
||||
}
|
||||
@@ -97,4 +101,14 @@ void Window::toggle_fullscreen() {
|
||||
);
|
||||
}
|
||||
update_viewport();
|
||||
}
|
||||
|
||||
void Window::toggle_mouse_able() {
|
||||
if (m_mouse_enable) {
|
||||
glfwSetInputMode(m_window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
|
||||
m_mouse_enable = false;
|
||||
} else {
|
||||
glfwSetInputMode(m_window, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
|
||||
m_mouse_enable = true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user