From b1b1f0c22cbd9cd7d5401622644cb80a24345c87 Mon Sep 17 00:00:00 2001 From: Nomango <569629550@qq.com> Date: Mon, 11 Mar 2019 17:24:11 +0800 Subject: [PATCH] Component design --- project/Easy2D/Easy2D.vcxproj | 22 +++-- project/Easy2D/Easy2D.vcxproj.filters | 69 ++++++++++----- project/Samples/main.cpp | 7 +- src/{core => audio}/Music.cpp | 10 +-- src/{core => audio}/Music.h | 10 ++- src/{utils => audio}/Player.cpp | 1 - src/{utils => audio}/Player.h | 7 +- src/{utils => audio}/Transcoder.cpp | 6 +- src/{utils => audio}/Transcoder.h | 1 - src/{core/audio.cpp => audio/Voice.cpp} | 102 +--------------------- src/{core/audio.h => audio/Voice.h} | 46 +--------- src/audio/audio-modules.cpp | 94 ++++++++++++++++++++ src/audio/audio-modules.h | 84 ++++++++++++++++++ src/audio/audio.cpp | 111 ++++++++++++++++++++++++ src/audio/audio.h | 69 +++++++++++++++ src/core/Application.cpp | 77 ++++++++++++---- src/core/Application.h | 36 +++++++- src/core/Array.h | 16 ++-- src/core/ComPtr.hpp | 41 +++++++++ src/core/Component.h | 32 +++++++ src/core/Image.cpp | 4 +- src/core/Input.cpp | 52 +++++------ src/core/Input.h | 26 ++++-- src/core/config.h | 1 - src/core/helper.hpp | 3 +- src/core/modules.cpp | 66 -------------- src/core/modules.h | 53 ----------- src/core/render.cpp | 50 ++++++----- src/core/render.h | 38 ++++---- src/core/window.cpp | 4 +- src/core/window.h | 3 +- src/dx/helper.hpp | 17 +--- src/easy2d.h | 18 ++-- src/utils/ResLoader.cpp | 2 +- src/utils/ResLoader.h | 1 + 35 files changed, 722 insertions(+), 457 deletions(-) rename src/{core => audio}/Music.cpp (95%) rename src/{core => audio}/Music.h (93%) rename src/{utils => audio}/Player.cpp (99%) rename src/{utils => audio}/Player.h (96%) rename src/{utils => audio}/Transcoder.cpp (99%) rename src/{utils => audio}/Transcoder.h (98%) rename src/{core/audio.cpp => audio/Voice.cpp} (64%) rename src/{core/audio.h => audio/Voice.h} (73%) create mode 100644 src/audio/audio-modules.cpp create mode 100644 src/audio/audio-modules.h create mode 100644 src/audio/audio.cpp create mode 100644 src/audio/audio.h create mode 100644 src/core/ComPtr.hpp create mode 100644 src/core/Component.h diff --git a/project/Easy2D/Easy2D.vcxproj b/project/Easy2D/Easy2D.vcxproj index 82024beb..48fc5fed 100644 --- a/project/Easy2D/Easy2D.vcxproj +++ b/project/Easy2D/Easy2D.vcxproj @@ -1,6 +1,12 @@ + + + + + + @@ -8,10 +14,11 @@ - + + @@ -32,7 +39,6 @@ - @@ -69,18 +75,21 @@ - - + + + + + + - @@ -94,7 +103,6 @@ - @@ -117,10 +125,8 @@ - - diff --git a/project/Easy2D/Easy2D.vcxproj.filters b/project/Easy2D/Easy2D.vcxproj.filters index bed14fd0..1e8ff355 100644 --- a/project/Easy2D/Easy2D.vcxproj.filters +++ b/project/Easy2D/Easy2D.vcxproj.filters @@ -16,15 +16,15 @@ {a9793a75-3212-4e31-a443-b23f18a1e136} + + {836608a6-7443-48f9-8acd-18d3ba664348} + core - - core - core @@ -94,21 +94,12 @@ utils - - utils - - - utils - ui ui - - core - core @@ -232,14 +223,35 @@ dx + + audio + + + audio + + + audio + + + audio + + + audio + + + core + + + audio + + + core + core - - core - core @@ -297,21 +309,12 @@ utils - - utils - - - utils - ui ui - - core - core @@ -372,5 +375,23 @@ dx + + audio + + + audio + + + audio + + + audio + + + audio + + + audio + \ No newline at end of file diff --git a/project/Samples/main.cpp b/project/Samples/main.cpp index 1fcbbbb9..fa0bb2b8 100644 --- a/project/Samples/main.cpp +++ b/project/Samples/main.cpp @@ -25,11 +25,10 @@ class DemoApp public: DemoApp() { - Options options; - options.title = L"Easy2D示例程序"; - options.width = WINDOW_WIDTH; - options.height = WINDOW_HEIGHT; + // 使用 Audio 组件 + Use(&Audio::Instance()); + Options options(L"Easy2D示例程序", WINDOW_WIDTH, WINDOW_HEIGHT); Init(options); } diff --git a/src/core/Music.cpp b/src/audio/Music.cpp similarity index 95% rename from src/core/Music.cpp rename to src/audio/Music.cpp index 8b8f47d3..d87bcbb8 100644 --- a/src/core/Music.cpp +++ b/src/audio/Music.cpp @@ -19,12 +19,10 @@ // THE SOFTWARE. #include "Music.h" -#include "../utils/Transcoder.h" -#include "../utils/File.h" -#include "../utils/string.h" -#include "modules.h" +#include "Transcoder.h" #include "audio.h" -#include "logs.h" +#include "../core/logs.h" +#include "../core/modules.h" namespace easy2d { @@ -60,7 +58,7 @@ namespace easy2d if (res.IsFileType()) { - if (!File(res.GetFileName()).Exists()) + if (!modules::Shlwapi::Get().PathFileExistsW(res.GetFileName().c_str())) { E2D_WARNING_LOG(L"Media file '%s' not found", res.GetFileName().c_str()); return false; diff --git a/src/core/Music.h b/src/audio/Music.h similarity index 93% rename from src/core/Music.h rename to src/audio/Music.h index 298a044d..59282f19 100644 --- a/src/core/Music.h +++ b/src/audio/Music.h @@ -19,13 +19,15 @@ // THE SOFTWARE. #pragma once -#include "include-forwards.h" -#include "audio.h" -#include "Resource.h" +#include "../core/include-forwards.h" +#include "../core/Resource.h" +#include "Voice.h" namespace easy2d { - // 音乐 + E2D_DECLARE_SMART_PTR(Music); + + // 音乐对象 class E2D_API Music : public virtual Object { diff --git a/src/utils/Player.cpp b/src/audio/Player.cpp similarity index 99% rename from src/utils/Player.cpp rename to src/audio/Player.cpp index 834d0d22..7f1b16d8 100644 --- a/src/utils/Player.cpp +++ b/src/audio/Player.cpp @@ -19,7 +19,6 @@ // THE SOFTWARE. #include "Player.h" -#include "../core/Music.h" namespace easy2d { diff --git a/src/utils/Player.h b/src/audio/Player.h similarity index 96% rename from src/utils/Player.h rename to src/audio/Player.h index 340fa45b..1abae46d 100644 --- a/src/utils/Player.h +++ b/src/audio/Player.h @@ -20,14 +20,15 @@ #pragma once #include "../core/include-forwards.h" -#include "../core/Resource.h" -#include +#include "Music.h" namespace easy2d { + E2D_DECLARE_SMART_PTR(Player); + // 音乐播放器 class E2D_API Player - : protected Noncopyable + : protected Object { using MusicMap = Map; diff --git a/src/utils/Transcoder.cpp b/src/audio/Transcoder.cpp similarity index 99% rename from src/utils/Transcoder.cpp rename to src/audio/Transcoder.cpp index 58a3e2d1..d332b019 100644 --- a/src/utils/Transcoder.cpp +++ b/src/audio/Transcoder.cpp @@ -23,10 +23,10 @@ #endif #include "Transcoder.h" -#include "../core/modules.h" +#include "audio-modules.h" +#include "../core/ComPtr.hpp" #include "../core/logs.h" -#include "../DX/helper.hpp" -#include +#include "../core/modules.h" namespace easy2d { diff --git a/src/utils/Transcoder.h b/src/audio/Transcoder.h similarity index 98% rename from src/utils/Transcoder.h rename to src/audio/Transcoder.h index a5320687..bc07e3b1 100644 --- a/src/utils/Transcoder.h +++ b/src/audio/Transcoder.h @@ -19,7 +19,6 @@ // THE SOFTWARE. #pragma once -#include "../core/macros.h" #include "../core/Resource.h" #include #include diff --git a/src/core/audio.cpp b/src/audio/Voice.cpp similarity index 64% rename from src/core/audio.cpp rename to src/audio/Voice.cpp index c4e7300f..fe46f23e 100644 --- a/src/core/audio.cpp +++ b/src/audio/Voice.cpp @@ -18,20 +18,11 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +#include "Voice.h" #include "audio.h" -#include "include-forwards.h" -#include "modules.h" -#include "logs.h" -#include -#include -#include -#include + namespace easy2d { - //------------------------------------------------------- - // Voice - //------------------------------------------------------- - Voice::Voice() : source_voice_(nullptr) { @@ -154,93 +145,4 @@ namespace easy2d source_voice_ = source_voice; } - - //------------------------------------------------------- - // Audio - //------------------------------------------------------- - - Audio::Audio() - : x_audio2_(nullptr) - , mastering_voice_(nullptr) - { - } - - Audio::~Audio() - { - } - - HRESULT Audio::Init() - { - E2D_LOG(L"Creating audio resources"); - - HRESULT hr = modules::MediaFoundation::Get().MFStartup(MF_VERSION, MFSTARTUP_FULL); - - if (SUCCEEDED(hr)) - { - hr = modules::XAudio2::Get().XAudio2Create(&x_audio2_, 0, XAUDIO2_DEFAULT_PROCESSOR); - } - - if (SUCCEEDED(hr)) - { - hr = x_audio2_->CreateMasteringVoice(&mastering_voice_); - } - - return hr; - } - - void Audio::Destroy() - { - E2D_LOG(L"Destroying audio resources"); - - ClearVoiceCache(); - - if (mastering_voice_) - { - mastering_voice_->DestroyVoice(); - mastering_voice_ = nullptr; - } - - DX::SafeRelease(x_audio2_); - - modules::MediaFoundation::Get().MFShutdown(); - } - - HRESULT Audio::CreateVoice(Voice& voice, const WAVEFORMATEX* wfx) - { - HRESULT hr; - IXAudio2SourceVoice* source_voice; - - hr = x_audio2_->CreateSourceVoice(&source_voice, wfx, 0, XAUDIO2_DEFAULT_FREQ_RATIO); - if (SUCCEEDED(hr)) - { - voice.SetSourceVoice(source_voice); - voice_cache_.insert(&voice); - } - return hr; - } - - void Audio::DeleteVoice(Voice* voice) - { - voice_cache_.erase(voice); - } - - void Audio::ClearVoiceCache() - { - for (auto voice : voice_cache_) - { - voice->Destroy(); - } - voice_cache_.clear(); - } - - void Audio::Open() - { - x_audio2_->StartEngine(); - } - - void Audio::Close() - { - x_audio2_->StopEngine(); - } - } \ No newline at end of file diff --git a/src/core/audio.h b/src/audio/Voice.h similarity index 73% rename from src/core/audio.h rename to src/audio/Voice.h index 355dfa09..583179f9 100644 --- a/src/core/audio.h +++ b/src/audio/Voice.h @@ -19,10 +19,8 @@ // THE SOFTWARE. #pragma once -#include "macros.h" -#include "helper.hpp" -#include "Singleton.hpp" -#include "noncopyable.hpp" +#include "../core/macros.h" +#include "../core/noncopyable.hpp" #include namespace easy2d @@ -73,44 +71,4 @@ namespace easy2d IXAudio2SourceVoice* source_voice_; }; - - class E2D_API Audio - : public Singleton