diff --git a/src/ReDIVA/pv_game/pv_game_pv_data.cpp b/src/ReDIVA/pv_game/pv_game_pv_data.cpp index 5570f9b2..c012d0ab 100644 --- a/src/ReDIVA/pv_game/pv_game_pv_data.cpp +++ b/src/ReDIVA/pv_game/pv_game_pv_data.cpp @@ -1728,21 +1728,21 @@ bool pv_game_pv_data::dsc_ctrl(float_t delta_time, int64_t curr_time, if (!app::TaskWork::check_task_ready(task_movie_get(i))) continue; - TaskMovie::DispState disp_state = TaskMovie::DispState::None; + TaskMovie::DispType disp_type = TaskMovie::DispType::None; if (pv_game_get()->data.movie_index == i) { if (!pv_game->data.enable_movie) state = 0; switch (state) { case 1: - disp_state = TaskMovie::DispState::Disp; + disp_type = TaskMovie::DispType::SpriteTextute; break; case 2: - disp_state = TaskMovie::DispState::Hide; + disp_type = TaskMovie::DispType::Textute; break; } } - task_movie_get(i)->disp_state = disp_state; + task_movie_get(i)->disp_type = disp_type; break; } } break; @@ -1984,26 +1984,26 @@ bool pv_game_pv_data::dsc_ctrl(float_t delta_time, int64_t curr_time, for (int32_t m = 0; m < TASK_MOVIE_COUNT; m++) if (app::TaskWork::check_task_ready(task_movie_get(m))) - task_movie_get(m)->disp_state = TaskMovie::DispState::None; + task_movie_get(m)->disp_type = TaskMovie::DispType::None; if (index != -1 && app::TaskWork::check_task_ready(task_movie_get(index))) { task_movie_get(index)->Play(); pv_game_get()->data.movie_index = index; movie_play_time_set(curr_time); - TaskMovie::DispState disp_state = TaskMovie::DispState::None; + TaskMovie::DispType disp_type = TaskMovie::DispType::None; if (!pv_game->data.enable_movie) state = 0; switch (state) { case 1: - disp_state = TaskMovie::DispState::Disp; + disp_type = TaskMovie::DispType::SpriteTextute; break; case 2: - disp_state = TaskMovie::DispState::Hide; + disp_type = TaskMovie::DispType::Textute; break; } - task_movie_get(index)->disp_state = disp_state; + task_movie_get(index)->disp_type = disp_type; } } break; case DSC_FT_CHARA_LIGHT: { diff --git a/src/ReDIVA/task_movie.cpp b/src/ReDIVA/task_movie.cpp index e7b056c2..79a1ee0e 100644 --- a/src/ReDIVA/task_movie.cpp +++ b/src/ReDIVA/task_movie.cpp @@ -205,7 +205,7 @@ void TaskMovie::Player::UpdateInteropTexture(TaskMovie::PlayerVideoParams* playe } TaskMovie::TaskMovie() : player(), player_video_params(), tex(), pause(), wait_play() { - disp_state = TaskMovie::DispState::Disp; + disp_type = TaskMovie::DispType::SpriteTextute; state = TaskMovie::State::Wait; } @@ -242,12 +242,16 @@ bool TaskMovie::ctrl() { if (!tex) tex = sub_14041E560(); - if (disp_state != TaskMovie::DispState::None) + if (disp_type != TaskMovie::DispType::None) player->GetInteropTexture(tex); } - if (!player->interop_texture && !no_interop) - task_movie_player_no_interop.insert({ player, {} }).first->second.Create(); + if (player && !player->interop_texture + && !no_interop && disp_type != TaskMovie::DispType::None) { + HRESULT hr = player->player->GetGLDXIntreropTexture(&player->interop_texture); + if (hr < S_FALSE) + task_movie_player_no_interop.insert({ player, {} }).first->second.Create(); + } } return false; } @@ -273,7 +277,7 @@ bool TaskMovie::dest() { } void TaskMovie::disp() { - if (state != TaskMovie::State::Disp || disp_state != TaskMovie::DispState::Disp || !tex) + if (state != TaskMovie::State::Disp || disp_type != TaskMovie::DispType::SpriteTextute || !tex) return; float_t width = (float_t)player_video_params->width; @@ -512,7 +516,7 @@ void TaskMovie::Start(const std::string& path) { bool TaskMovie::Unload() { bool res = TaskMovie::Shutdown(); - disp_state = TaskMovie::DispState::Disp; + disp_type = TaskMovie::DispType::SpriteTextute; return res; } @@ -575,7 +579,7 @@ void TaskMoviePlayerNoInterop::Ctrl(TaskMovie* task_movie, if (!task_movie->tex) task_movie->tex = sub_14041E560(); - if (task_movie->disp_state != TaskMovie::DispState::None) + if (task_movie->disp_type != TaskMovie::DispType::None) GetD3D11Texture(player, task_movie->tex); } } diff --git a/src/ReDIVA/task_movie.hpp b/src/ReDIVA/task_movie.hpp index 18da505a..703ee962 100644 --- a/src/ReDIVA/task_movie.hpp +++ b/src/ReDIVA/task_movie.hpp @@ -21,10 +21,10 @@ public: Max, }; - enum class DispState { + enum class DispType { None = 0, - Disp, - Hide, + SpriteTextute, + Textute, Max, }; @@ -83,7 +83,7 @@ public: }; std::string path; - DispState disp_state; + DispType disp_type; SprParams spr_params; State state; Player* player;