| #include "pch.h" | |
| #include "BasicTimer.h" | |
| #include "Direct3DApp1.h" | |
| using namespace Windows::ApplicationModel; | |
| using namespace Windows::ApplicationModel::Core; | |
| using namespace Windows::ApplicationModel::Activation; | |
| using namespace Windows::UI::Core; | |
| using namespace Windows::System; | |
| using namespace Windows::Foundation; | |
| using namespace Windows::Graphics::Display; | |
| using namespace concurrency; | |
| Direct3DApp1::Direct3DApp1() | |
| : m_windowClosed(false) | |
| , m_windowVisible(true) | |
| { | |
| } | |
| void Direct3DApp1::Initialize(CoreApplicationView ^ applicationView) | |
| { | |
| applicationView->Activated += | |
| ref new TypedEventHandler<CoreApplicationView ^, IActivatedEventArgs ^>( | |
| this, &Direct3DApp1::OnActivated); | |
| CoreApplication::Suspending += ref new EventHandler<SuspendingEventArgs ^>( | |
| this, &Direct3DApp1::OnSuspending); | |
| CoreApplication::Resuming += | |
| ref new EventHandler<Platform::Object ^>(this, &Direct3DApp1::OnResuming); | |
| m_renderer = ref new CubeRenderer(); | |
| } | |
| void Direct3DApp1::SetWindow(CoreWindow ^ window) | |
| { | |
| window->SizeChanged += | |
| ref new TypedEventHandler<CoreWindow ^, WindowSizeChangedEventArgs ^>( | |
| this, &Direct3DApp1::OnWindowSizeChanged); | |
| window->VisibilityChanged += | |
| ref new TypedEventHandler<CoreWindow ^, VisibilityChangedEventArgs ^>( | |
| this, &Direct3DApp1::OnVisibilityChanged); | |
| window->Closed += | |
| ref new TypedEventHandler<CoreWindow ^, CoreWindowEventArgs ^>( | |
| this, &Direct3DApp1::OnWindowClosed); | |
| #ifndef PHONE | |
| window->PointerCursor = ref new CoreCursor(CoreCursorType::Arrow, 0); | |
| #endif | |
| window->PointerPressed += | |
| ref new TypedEventHandler<CoreWindow ^, PointerEventArgs ^>( | |
| this, &Direct3DApp1::OnPointerPressed); | |
| window->PointerMoved += | |
| ref new TypedEventHandler<CoreWindow ^, PointerEventArgs ^>( | |
| this, &Direct3DApp1::OnPointerMoved); | |
| m_renderer->Initialize(CoreWindow::GetForCurrentThread()); | |
| } | |
| void Direct3DApp1::Load(Platform::String ^ entryPoint) | |
| { | |
| } | |
| void Direct3DApp1::Run() | |
| { | |
| BasicTimer ^ timer = ref new BasicTimer(); | |
| while (!m_windowClosed) { | |
| if (m_windowVisible) { | |
| timer->Update(); | |
| CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents( | |
| CoreProcessEventsOption::ProcessAllIfPresent); | |
| m_renderer->Update(timer->Total, timer->Delta); | |
| m_renderer->Render(); | |
| m_renderer | |
| ->Present(); // This call is synchronized to the display frame rate. | |
| } else { | |
| CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents( | |
| CoreProcessEventsOption::ProcessOneAndAllPending); | |
| } | |
| } | |
| } | |
| void Direct3DApp1::Uninitialize() | |
| { | |
| } | |
| void Direct3DApp1::OnWindowSizeChanged(CoreWindow ^ sender, | |
| WindowSizeChangedEventArgs ^ args) | |
| { | |
| m_renderer->UpdateForWindowSizeChange(); | |
| } | |
| void Direct3DApp1::OnVisibilityChanged(CoreWindow ^ sender, | |
| VisibilityChangedEventArgs ^ args) | |
| { | |
| m_windowVisible = args->Visible; | |
| } | |
| void Direct3DApp1::OnWindowClosed(CoreWindow ^ sender, | |
| CoreWindowEventArgs ^ args) | |
| { | |
| m_windowClosed = true; | |
| } | |
| void Direct3DApp1::OnPointerPressed(CoreWindow ^ sender, | |
| PointerEventArgs ^ args) | |
| { | |
| // Insert your code here. | |
| } | |
| void Direct3DApp1::OnPointerMoved(CoreWindow ^ sender, PointerEventArgs ^ args) | |
| { | |
| // Insert your code here. | |
| } | |
| void Direct3DApp1::OnActivated(CoreApplicationView ^ applicationView, | |
| IActivatedEventArgs ^ args) | |
| { | |
| CoreWindow::GetForCurrentThread()->Activate(); | |
| } | |
| void Direct3DApp1::OnSuspending(Platform::Object ^ sender, | |
| SuspendingEventArgs ^ args) | |
| { | |
| // Save app state asynchronously after requesting a deferral. Holding a | |
| // deferral | |
| // indicates that the application is busy performing suspending operations. | |
| // Be | |
| // aware that a deferral may not be held indefinitely. After about five | |
| // seconds, | |
| // the app will be forced to exit. | |
| SuspendingDeferral ^ deferral = args->SuspendingOperation->GetDeferral(); | |
| m_renderer->ReleaseResourcesForSuspending(); | |
| create_task([this, deferral]() { | |
| // Insert your code here. | |
| deferral->Complete(); | |
| }); | |
| } | |
| void Direct3DApp1::OnResuming(Platform::Object ^ sender, | |
| Platform::Object ^ args) | |
| { | |
| // Restore any data or state that was unloaded on suspend. By default, data | |
| // and state are persisted when resuming from suspend. Note that this event | |
| // does not occur if the app was previously terminated. | |
| m_renderer->CreateWindowSizeDependentResources(); | |
| } | |
| IFrameworkView ^ Direct3DApplicationSource::CreateView() | |
| { | |
| return ref new Direct3DApp1(); | |
| } | |
| [Platform::MTAThread] int main(Platform::Array<Platform::String ^> ^) | |
| { | |
| auto direct3DApplicationSource = ref new Direct3DApplicationSource(); | |
| CoreApplication::Run(direct3DApplicationSource); | |
| return 0; | |
| } |