#pragma once #include #include "MediaAsset.h" // Renderer 클래스에 대한 전방 선언 (순환 참조 방지) class Renderer; class TransitionStrategy { public: virtual ~TransitionStrategy() = default; // --- ⬇️ 두 함수로 역할을 분리 ⬇️ --- /** * @brief 전환이 완료되었는지 확인합니다. * @param elapsedMs 전환 시작 후 경과 시간 * @return 완료되었으면 true */ virtual bool isComplete(long long elapsedMs) const = 0; /** * @brief 전환 효과를 직접 렌더링 버퍼에 그립니다. * @param renderer Renderer 객체에 대한 포인터 (헬퍼 함수 호출용) * @param buffer 그림을 그릴 캔버스 * @param source 사라지는 미디어 * @param dest 나타나는 미디어 * @param elapsedMs 전환 시작 후 경과 시간 * @return 전환이 완료되었으면 true, 아니면 false */ virtual void execute(Renderer* renderer, ANativeWindow_Buffer& buffer, MediaAsset& source, MediaAsset& dest, long long elapsedMs) = 0; virtual void reset() = 0; protected: TransitionStrategy(long long duration) : durationMs_(duration) {} long long durationMs_; };