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