При программировании с помощью DirectX используются методы, отличные от UWP, и такие возможности, как WinMain и WinProc? У меня есть старшая книга на win32 для Directx, но она полностью отличается от UWP.В Directx с UWP можно использовать win32?
ответ
DirectX 11 поддерживается Универсальной платформой Windows (UWP), а основной API такой же, как и в классических настольных приложениях Win32. Большие различия в библиотеках утилиты, потому что вы не можете использовать устаревшую библиотеку D3DX
в UWP и использовать CoreWindow
вместо сообщений Win32 и WndProc
.
MSDN
Where is the DirectX SDK (2015 Edition)?
Living without D3DX
Вы должны взглянуть на this post по рекомендациям DirectX книги, а также DirectX Tool Kit tutorials.
Если ваша книга достаточно взрослая, чтобы говорить о Direct3D 9 или Direct3D 10, то это не полезно для UWP.
Начальная точка и основное назначение приложения используются в UWP при использовании языковых расширений C++/CX или с использованием языковых прогнозов C++/WinRT. Тем не менее, вы можете легко изолировать это и просто сосредоточиться на swapchain DirectX и рендеринге, который является таким же как в Windows, так и в Win32 classic и 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;
}
Это научит меня покупать книгу за $ 2.02 в Goodwill. Я забыл о UWP, когда купил его, но потом он был слишком лат. All Sales Final в магазине сбережений. Это хорошая причина. – johnny
UWP использует 'запись WinMain' как и любое приложение Windows Desktop. И поскольку DirectX на десятилетие старше UWP, вы, безусловно, можете писать приложения для Windows Desktop с DirectX. Почему вы предполагаете иначе? Во всяком случае, трудно сказать, что вы на самом деле здесь. – IInspectable
Я читал, что WinMain и WinProc ушли в UWP. Редактировать:. Я пытаюсь понять, не пустая трата времени, чтобы выучить win32, для новых проектов. – johnny
Я не уверен, какую магию вы относите к предоставленной пользователем точке входа. Это просто символ, и это может быть что угодно. Как это бывает, точка входа UWP по-прежнему такая же, как для любого приложения Win32, но в зависимости от языковой проекции вы можете не видеть ее как таковой. Разве это трата для изучения Windows API? Я бы сказал: Нет, никогда. UWP - это Win32, просто с множеством COM. – IInspectable