【问题标题】:In Directx with UWP, can win32 be used?在 Directx with UWP 中,可以使用 win32 吗?
【发布时间】:2017-02-14 02:55:32
【问题描述】:

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

【问题讨论】:

  • UWP 使用 WinMain 入口点,就像任何 Windows 桌面应用程序一样。而且由于 DirectX 比 UWP 早了十年,您当然可以使用 DirectX 编写 Windows 桌面应用程序。为什么你会假设不一样?无论如何,很难说,你在这里真正追求的是什么。
  • 我读过 WinMain 和 WinProc 在 UWP 中消失了。编辑:。我想看看为新项目学习win32是否浪费时间。
  • 我不确定您将哪种魔法归因于用户提供的入口点。它只是一个符号,它可以是任何东西。碰巧的是,UWP 的入口点仍然与任何 Win32 应用程序相同,但取决于语言投影,您可能不会看到它。学习 Windows API 是不是很浪费?我会说:不,从来没有。 UWP 是 Win32,只是在大量的 COM 中填充。

标签: uwp directx


【解决方案1】:

通用 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;
}

【讨论】:

  • 这将教会我在 Goodwill 购买 2.02 美元的书。我买的时候忘记了 UWP,但是在旧货店的 All Sales Final 为时已晚。这是一个很好的理由。
猜你喜欢
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多