在使用UWP的Directx中,可以使用win32吗?

时间:2017-02-13 18:04:07

标签: uwp directx

使用DirectX进行编程时,是否使用非UWP实践并保留WinMain和WinProc等功能?我在win32上有一本关于Directx的旧书,但它与UWP完全不同。

1 个答案:

答案 0 :(得分:2)

通用Windows平台(UWP)支持DirectX 11,核心API与传统的Win32桌面应用程序相同。实用程序库之间存在很大差异,因为您无法在UWP中使用已弃用的D3DX库,并且使用CoreWindow而不是Win32消息和WndProc

MSDN
Where is the DirectX SDK (2015 Edition)?
Living without D3DX

  

您应该查看有关DirectX图书推荐的this post以及DirectX Tool Kit tutorials

如果你的书已经足够老了,可以谈论Direct3D 9或Direct3D 10,那么它对UWP没用。

使用C++/CX语言扩展或使用C++/WinRT语言预测时,UWP中的“主应用程序”入口点和循环不同。也就是说,您可以轻松地将其与此相关,只关注DirectX交换链和渲染,这在Win32经典桌面和UWP应用程序中都是相同的。我在我的Direct3D VS Game templates中执行此操作,这两个平台的结构相同。

对于C ++ / CX UWP应用程序,切入点是:

ref class ViewProvider sealed : public IFrameworkView
{
    /* There is no WndProc. This class registers for events instead. */
}

ref class ViewProviderFactory : IFrameworkViewSource
{
public:
   virtual IFrameworkView^ CreateView()
   {
       return ref new ViewProvider();
   }
};

[Platform::MTAThread]
int __cdecl main(Platform::Array<Platform::String^>^ argv)
{
    auto viewProviderFactory = ref new ViewProviderFactory();
    CoreApplication::Run(viewProviderFactory);
    return 0;
}

对于C ++ / WinRT UWP应用程序,切入点是:

class ViewProvider final :
    public winrt::implements<ViewProvider, IFrameworkView>
{
    /* There is no WndProc. This class registers for events instead. */
}

class ViewProviderFactory final : public
     winrt::implements<ViewProviderFactory, IFrameworkViewSource>
{
public:
    IFrameworkView CreateView()
    {
        return winrt::make<ViewProvider>();
    }
};

int WINAPI wWinMain(
    _In_ HINSTANCE hInstance,
    _In_ HINSTANCE hPrevInstance,
    _In_ LPWSTR    lpCmdLine,
    _In_ int       nCmdShow
)
{
    ViewProviderFactory viewProviderFactory;
    CoreApplication::Run(viewProviderFactory);
    return 0;
}