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