update: debug mode can be turned on during initialization
This commit is contained in:
parent
d2532c09db
commit
ab2757375d
|
|
@ -55,9 +55,12 @@ namespace easy2d
|
||||||
|
|
||||||
void Game::Initialize(const Options& options)
|
void Game::Initialize(const Options& options)
|
||||||
{
|
{
|
||||||
Window::Instance().Initialize(options.title, options.width, options.height, options.icon, options.debug);
|
debug_mode_ = options.debug;
|
||||||
devices::Graphics::Instance().Initialize(Window::Instance().GetHandle());
|
|
||||||
devices::Audio::Instance().Initialize();
|
Window::Instance().Initialize(options.title, options.width, options.height, options.icon, debug_mode_);
|
||||||
|
devices::Graphics::Instance().Initialize(Window::Instance().GetHandle(), debug_mode_);
|
||||||
|
devices::Input::Instance().Initialize(debug_mode_);
|
||||||
|
devices::Audio::Instance().Initialize(debug_mode_);
|
||||||
|
|
||||||
// 若开启了调试模式,打开控制台
|
// 若开启了调试模式,打开控制台
|
||||||
HWND console = ::GetConsoleWindow();
|
HWND console = ::GetConsoleWindow();
|
||||||
|
|
@ -250,7 +253,8 @@ namespace easy2d
|
||||||
|
|
||||||
void Game::DrawScene()
|
void Game::DrawScene()
|
||||||
{
|
{
|
||||||
devices::Graphics::Instance().BeginDraw(Window::Instance().GetHandle());
|
auto& graphics = devices::Graphics::Instance();
|
||||||
|
graphics.BeginDraw(Window::Instance().GetHandle());
|
||||||
|
|
||||||
if (transition_)
|
if (transition_)
|
||||||
{
|
{
|
||||||
|
|
@ -265,25 +269,20 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
if (curr_scene_ && curr_scene_->GetRoot())
|
if (curr_scene_ && curr_scene_->GetRoot())
|
||||||
{
|
{
|
||||||
devices::Graphics::Instance().SetTransform(math::Matrix());
|
graphics.SetTransform(math::Matrix());
|
||||||
devices::Graphics::Instance().SetBrushOpacity(1.f);
|
graphics.SetBrushOpacity(1.f);
|
||||||
curr_scene_->GetRoot()->DrawBorder();
|
curr_scene_->GetRoot()->DrawBorder();
|
||||||
}
|
}
|
||||||
if (next_scene_ && next_scene_->GetRoot())
|
if (next_scene_ && next_scene_->GetRoot())
|
||||||
{
|
{
|
||||||
devices::Graphics::Instance().SetTransform(math::Matrix());
|
graphics.SetTransform(math::Matrix());
|
||||||
devices::Graphics::Instance().SetBrushOpacity(1.f);
|
graphics.SetBrushOpacity(1.f);
|
||||||
next_scene_->GetRoot()->DrawBorder();
|
next_scene_->GetRoot()->DrawBorder();
|
||||||
}
|
}
|
||||||
|
|
||||||
devices::Graphics::Instance().DrawDebugInfo();
|
graphics.DrawDebugInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
devices::Graphics::Instance().EndDraw();
|
graphics.EndDraw();
|
||||||
}
|
|
||||||
|
|
||||||
void Game::SetDebugMode(bool enabled)
|
|
||||||
{
|
|
||||||
debug_mode_ = enabled;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -75,11 +75,6 @@ namespace easy2d
|
||||||
// ½áÊø
|
// ½áÊø
|
||||||
void Quit();
|
void Quit();
|
||||||
|
|
||||||
// µ÷ÊÔģʽ
|
|
||||||
void SetDebugMode(
|
|
||||||
bool enabled
|
|
||||||
);
|
|
||||||
|
|
||||||
// Çл»³¡¾°
|
// Çл»³¡¾°
|
||||||
void EnterScene(
|
void EnterScene(
|
||||||
Scene * scene, /* ³¡¾° */
|
Scene * scene, /* ³¡¾° */
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ namespace easy2d
|
||||||
namespace devices
|
namespace devices
|
||||||
{
|
{
|
||||||
InputDevice::InputDevice()
|
InputDevice::InputDevice()
|
||||||
|
: initialized(false)
|
||||||
{
|
{
|
||||||
ZeroMemory(keys_, sizeof(keys_));
|
ZeroMemory(keys_, sizeof(keys_));
|
||||||
}
|
}
|
||||||
|
|
@ -33,6 +34,14 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InputDevice::Initialize(bool debug)
|
||||||
|
{
|
||||||
|
if (initialized)
|
||||||
|
return;
|
||||||
|
|
||||||
|
initialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
void InputDevice::Update(HWND hwnd, float scale_x, float scale_y)
|
void InputDevice::Update(HWND hwnd, float scale_x, float scale_y)
|
||||||
{
|
{
|
||||||
::GetKeyboardState(keys_);
|
::GetKeyboardState(keys_);
|
||||||
|
|
|
||||||
|
|
@ -33,9 +33,7 @@ namespace easy2d
|
||||||
E2D_DISABLE_COPY(InputDevice);
|
E2D_DISABLE_COPY(InputDevice);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
InputDevice();
|
void Initialize(bool debug);
|
||||||
|
|
||||||
~InputDevice();
|
|
||||||
|
|
||||||
// 检测键盘某按键是否正被按下
|
// 检测键盘某按键是否正被按下
|
||||||
bool IsDown(
|
bool IsDown(
|
||||||
|
|
@ -64,6 +62,12 @@ namespace easy2d
|
||||||
);
|
);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
InputDevice();
|
||||||
|
|
||||||
|
~InputDevice();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool initialized;
|
||||||
BYTE keys_[256];
|
BYTE keys_[256];
|
||||||
Point mouse_pos_;
|
Point mouse_pos_;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,6 @@ namespace easy2d
|
||||||
public:
|
public:
|
||||||
static inline T& Instance();
|
static inline T& Instance();
|
||||||
|
|
||||||
static inline void Destroy();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ISingleton() {}
|
ISingleton() {}
|
||||||
|
|
||||||
|
|
@ -39,27 +37,16 @@ namespace easy2d
|
||||||
ISingleton(const ISingleton&) = delete;
|
ISingleton(const ISingleton&) = delete;
|
||||||
|
|
||||||
ISingleton & operator= (const ISingleton &) = delete;
|
ISingleton & operator= (const ISingleton &) = delete;
|
||||||
|
|
||||||
static std::unique_ptr<T> instance_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline T & easy2d::ISingleton<T>::Instance()
|
inline T & easy2d::ISingleton<T>::Instance()
|
||||||
{
|
{
|
||||||
|
static std::unique_ptr<T> instance_;
|
||||||
if (!instance_)
|
if (!instance_)
|
||||||
instance_.reset(new (std::nothrow) T);
|
instance_.reset(new (std::nothrow) T);
|
||||||
return *instance_;
|
return *instance_;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
inline void easy2d::ISingleton<T>::Destroy()
|
|
||||||
{
|
|
||||||
if (instance_)
|
|
||||||
instance_.reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
std::unique_ptr<T> easy2d::ISingleton<T>::instance_;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Class that will implement the singleton mode,
|
// Class that will implement the singleton mode,
|
||||||
|
|
|
||||||
|
|
@ -163,6 +163,7 @@ namespace easy2d
|
||||||
AudioDevice::AudioDevice()
|
AudioDevice::AudioDevice()
|
||||||
: x_audio2_(nullptr)
|
: x_audio2_(nullptr)
|
||||||
, mastering_voice_(nullptr)
|
, mastering_voice_(nullptr)
|
||||||
|
, initialized(false)
|
||||||
{
|
{
|
||||||
modules::Initialize();
|
modules::Initialize();
|
||||||
}
|
}
|
||||||
|
|
@ -184,8 +185,11 @@ namespace easy2d
|
||||||
modules::Destroy();
|
modules::Destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioDevice::Initialize()
|
void AudioDevice::Initialize(bool debug)
|
||||||
{
|
{
|
||||||
|
if (initialized)
|
||||||
|
return;
|
||||||
|
|
||||||
ThrowIfFailed(
|
ThrowIfFailed(
|
||||||
modules::MediaFoundation.MFStartup(MF_VERSION, MFSTARTUP_FULL)
|
modules::MediaFoundation.MFStartup(MF_VERSION, MFSTARTUP_FULL)
|
||||||
);
|
);
|
||||||
|
|
@ -197,6 +201,8 @@ namespace easy2d
|
||||||
ThrowIfFailed(
|
ThrowIfFailed(
|
||||||
x_audio2_->CreateMasteringVoice(&mastering_voice_)
|
x_audio2_->CreateMasteringVoice(&mastering_voice_)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT AudioDevice::CreateVoice(Voice* voice, WAVEFORMATEX * wfx)
|
HRESULT AudioDevice::CreateVoice(Voice* voice, WAVEFORMATEX * wfx)
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ namespace easy2d
|
||||||
E2D_DISABLE_COPY(AudioDevice);
|
E2D_DISABLE_COPY(AudioDevice);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void Initialize();
|
void Initialize(bool debug);
|
||||||
|
|
||||||
// 开启设备
|
// 开启设备
|
||||||
void Open();
|
void Open();
|
||||||
|
|
@ -106,6 +106,7 @@ namespace easy2d
|
||||||
~AudioDevice();
|
~AudioDevice();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
bool initialized;
|
||||||
IXAudio2 * x_audio2_;
|
IXAudio2 * x_audio2_;
|
||||||
IXAudio2MasteringVoice* mastering_voice_;
|
IXAudio2MasteringVoice* mastering_voice_;
|
||||||
std::list<Voice*> voice_cache_;
|
std::list<Voice*> voice_cache_;
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,6 @@
|
||||||
|
|
||||||
#pragma comment(lib, "d2d1.lib")
|
#pragma comment(lib, "d2d1.lib")
|
||||||
#pragma comment(lib, "dwrite.lib")
|
#pragma comment(lib, "dwrite.lib")
|
||||||
#pragma comment(lib, "windowscodecs.lib")
|
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
|
|
@ -35,6 +34,7 @@ namespace easy2d
|
||||||
: fps_text_format_(nullptr)
|
: fps_text_format_(nullptr)
|
||||||
, fps_text_layout_(nullptr)
|
, fps_text_layout_(nullptr)
|
||||||
, clear_color_(D2D1::ColorF(D2D1::ColorF::Black))
|
, clear_color_(D2D1::ColorF(D2D1::ColorF::Black))
|
||||||
|
, initialized(false)
|
||||||
{
|
{
|
||||||
ZeroMemory(&d2d, sizeof(D2DResources));
|
ZeroMemory(&d2d, sizeof(D2DResources));
|
||||||
|
|
||||||
|
|
@ -63,15 +63,18 @@ namespace easy2d
|
||||||
modules::Destroy();
|
modules::Destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsDevice::Initialize(HWND hwnd)
|
void GraphicsDevice::Initialize(HWND hwnd, bool debug)
|
||||||
{
|
{
|
||||||
if (d2d.factory)
|
if (initialized)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
D2D1_FACTORY_OPTIONS options{ debug ? D2D1_DEBUG_LEVEL_INFORMATION : D2D1_DEBUG_LEVEL_NONE };
|
||||||
ThrowIfFailed(
|
ThrowIfFailed(
|
||||||
D2D1CreateFactory(
|
D2D1CreateFactory(
|
||||||
D2D1_FACTORY_TYPE_SINGLE_THREADED,
|
D2D1_FACTORY_TYPE_SINGLE_THREADED,
|
||||||
&d2d.factory
|
__uuidof(ID2D1Factory),
|
||||||
|
&options,
|
||||||
|
reinterpret_cast<void**>(&d2d.factory)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -80,7 +83,7 @@ namespace easy2d
|
||||||
CLSID_WICImagingFactory,
|
CLSID_WICImagingFactory,
|
||||||
nullptr,
|
nullptr,
|
||||||
CLSCTX_INPROC_SERVER,
|
CLSCTX_INPROC_SERVER,
|
||||||
IID_IWICImagingFactory,
|
__uuidof(IWICImagingFactory),
|
||||||
reinterpret_cast<void**>(&d2d.imaging_factory)
|
reinterpret_cast<void**>(&d2d.imaging_factory)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
@ -135,6 +138,8 @@ namespace easy2d
|
||||||
);
|
);
|
||||||
|
|
||||||
CreateDeviceResources(hwnd);
|
CreateDeviceResources(hwnd);
|
||||||
|
|
||||||
|
initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsDevice::BeginDraw(HWND hwnd)
|
void GraphicsDevice::BeginDraw(HWND hwnd)
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ namespace easy2d
|
||||||
E2D_DISABLE_COPY(GraphicsDevice);
|
E2D_DISABLE_COPY(GraphicsDevice);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void Initialize(HWND hwnd);
|
void Initialize(HWND hwnd, bool debug);
|
||||||
|
|
||||||
// ¿ªÊ¼äÖȾ
|
// ¿ªÊ¼äÖȾ
|
||||||
void BeginDraw(HWND hwnd);
|
void BeginDraw(HWND hwnd);
|
||||||
|
|
@ -168,6 +168,7 @@ namespace easy2d
|
||||||
~GraphicsDevice();
|
~GraphicsDevice();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
bool initialized;
|
||||||
D2DResources d2d;
|
D2DResources d2d;
|
||||||
D2D1_COLOR_F clear_color_;
|
D2D1_COLOR_F clear_color_;
|
||||||
IDWriteTextFormat* fps_text_format_;
|
IDWriteTextFormat* fps_text_format_;
|
||||||
|
|
|
||||||
|
|
@ -42,21 +42,25 @@ namespace easy2d
|
||||||
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM w_param, LPARAM l_param);
|
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM w_param, LPARAM l_param);
|
||||||
}
|
}
|
||||||
|
|
||||||
WindowInfo::WindowInfo()
|
WindowImpl::WindowImpl()
|
||||||
: handle(nullptr)
|
: handle(nullptr)
|
||||||
, scale_x(1.f)
|
, scale_x(1.f)
|
||||||
, scale_y(1.f)
|
, scale_y(1.f)
|
||||||
|
, initialized(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
WindowInfo::~WindowInfo()
|
WindowImpl::~WindowImpl()
|
||||||
{
|
{
|
||||||
if (handle)
|
if (handle)
|
||||||
::DestroyWindow(handle);
|
::DestroyWindow(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowInfo::Initialize(String title, int width, int height, LPCWSTR icon, bool debug)
|
void WindowImpl::Initialize(String title, int width, int height, LPCWSTR icon, bool debug)
|
||||||
{
|
{
|
||||||
|
if (initialized)
|
||||||
|
return;
|
||||||
|
|
||||||
HINSTANCE hinstance = GetModuleHandle(nullptr);
|
HINSTANCE hinstance = GetModuleHandle(nullptr);
|
||||||
WNDCLASSEX wcex = { 0 };
|
WNDCLASSEX wcex = { 0 };
|
||||||
wcex.cbSize = sizeof(WNDCLASSEX);
|
wcex.cbSize = sizeof(WNDCLASSEX);
|
||||||
|
|
@ -114,9 +118,11 @@ namespace easy2d
|
||||||
|
|
||||||
// ½ûÓÃÊäÈë·¨
|
// ½ûÓÃÊäÈë·¨
|
||||||
::ImmAssociateContext(handle, nullptr);
|
::ImmAssociateContext(handle, nullptr);
|
||||||
|
|
||||||
|
initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
String WindowInfo::GetTitle() const
|
String WindowImpl::GetTitle() const
|
||||||
{
|
{
|
||||||
if (handle)
|
if (handle)
|
||||||
{
|
{
|
||||||
|
|
@ -127,13 +133,13 @@ namespace easy2d
|
||||||
return String();
|
return String();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowInfo::SetTitle(const String& title)
|
void WindowImpl::SetTitle(const String& title)
|
||||||
{
|
{
|
||||||
if (handle)
|
if (handle)
|
||||||
::SetWindowText(handle, title.c_str());
|
::SetWindowText(handle, title.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
Size WindowInfo::GetSize() const
|
Size WindowImpl::GetSize() const
|
||||||
{
|
{
|
||||||
if (handle)
|
if (handle)
|
||||||
{
|
{
|
||||||
|
|
@ -147,17 +153,17 @@ namespace easy2d
|
||||||
return Size();
|
return Size();
|
||||||
}
|
}
|
||||||
|
|
||||||
float WindowInfo::GetWidth() const
|
float WindowImpl::GetWidth() const
|
||||||
{
|
{
|
||||||
return GetSize().width;
|
return GetSize().width;
|
||||||
}
|
}
|
||||||
|
|
||||||
float WindowInfo::GetHeight() const
|
float WindowImpl::GetHeight() const
|
||||||
{
|
{
|
||||||
return GetSize().height;
|
return GetSize().height;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowInfo::SetSize(int width, int height)
|
void WindowImpl::SetSize(int width, int height)
|
||||||
{
|
{
|
||||||
if (handle)
|
if (handle)
|
||||||
{
|
{
|
||||||
|
|
@ -173,7 +179,7 @@ namespace easy2d
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowInfo::SetIcon(LPCWSTR icon_resource)
|
void WindowImpl::SetIcon(LPCWSTR icon_resource)
|
||||||
{
|
{
|
||||||
if (handle)
|
if (handle)
|
||||||
{
|
{
|
||||||
|
|
@ -192,17 +198,17 @@ namespace easy2d
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HWND WindowInfo::GetHandle() const
|
HWND WindowImpl::GetHandle() const
|
||||||
{
|
{
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
float WindowInfo::GetContentScaleX() const
|
float WindowImpl::GetContentScaleX() const
|
||||||
{
|
{
|
||||||
return scale_x;
|
return scale_x;
|
||||||
}
|
}
|
||||||
|
|
||||||
float WindowInfo::GetContentScaleY() const
|
float WindowImpl::GetContentScaleY() const
|
||||||
{
|
{
|
||||||
return scale_y;
|
return scale_y;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,11 +26,11 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
class WindowInfo
|
class WindowImpl
|
||||||
{
|
{
|
||||||
E2D_DECLARE_SINGLETON(WindowInfo);
|
E2D_DECLARE_SINGLETON(WindowImpl);
|
||||||
|
|
||||||
E2D_DISABLE_COPY(WindowInfo);
|
E2D_DISABLE_COPY(WindowImpl);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void Initialize(
|
void Initialize(
|
||||||
|
|
@ -69,15 +69,16 @@ namespace easy2d
|
||||||
float GetContentScaleY() const;
|
float GetContentScaleY() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
WindowInfo();
|
WindowImpl();
|
||||||
|
|
||||||
~WindowInfo();
|
~WindowImpl();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool initialized;
|
||||||
HWND handle;
|
HWND handle;
|
||||||
float scale_x;
|
float scale_x;
|
||||||
float scale_y;
|
float scale_y;
|
||||||
};
|
};
|
||||||
|
|
||||||
E2D_DECLARE_SINGLETON_TYPE(WindowInfo, Window);
|
E2D_DECLARE_SINGLETON_TYPE(WindowImpl, Window);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue