使用DirectX进行编程时,是否使用非UWP实践并保留WinMain和WinProc等功能?我在win32上有一本关于Directx的旧书,但它与UWP完全不同。
答案 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;
}