Я пытаюсь заставить SDL использовать "direct3d11" в качестве драйвера рендеринга, поскольку "direct3d" не поддерживает SDL_BLENDOPERATION_MAXIMUM .
Согласно этой записи по связанному вопросу я смогу увидеть «direct3d11» как драйвер рендеринга, просматривая драйверы рендеринга SDL и распечатывая их.
Однако единственные драйверы, которые я получаю, это «direct3d», «opengl», «opengles2» и «software».
Я попытался сделать то, что было предложено здесь , но установка SDL_HINT_RENDER_DRIVER, очевидно, не имеет никакого эффекта, поскольку он даже не видит «direct3d11» в качестве опции (хотя, как ни странно, это не не выдает ошибку).
К сожалению, этот поток, похоже, запустил dry, и общее прибегание к помощи не помогло.
Итак ... почему я не вижу "direct3d11 "как вариант?
Это ожидаемое поведение?
Я пропускаю шаг в SDL?
Есть ли какая-то конфигурация Windows, которую я должен изменить?
Есть ли специальную библиотеку мне нужно для этого включить o работать?
Есть ли настройка или определение magi c компилятора или что-то, что мне нужно установить?
Работает ли этот тестовый код на машинах других людей?
Любая информация или помощь приветствуются.
Некоторые технические подробности:
ОС: Windows 10 (x64)
GPU: GeForce RTX 2060 (dxdiag перечисляет уровни функций как "12_1,12_0,11_1,11_0,10_1,10_0, 9_3,9_2,9_1 ")
Я использую Visual Studio 2017 (15.9.11)
При использовании SDL версии 2.0.10
Для SDL по умолчанию используется" direct3d "в качестве драйвера рендеринга при создании SDL_Renderer (не показан в тестовом коде)
Тестовый код:
#include <SDL.h>
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
// init
if (SDL_Init(SDL_INIT_EVERYTHING) < 0) {
std::cout << "SDL could not be initialized: " << SDL_GetError() << std::endl;
}
// print SDL version
SDL_version linked;
SDL_GetVersion(&linked);
printf("SDL version %d.%d.%d\n", linked.major, linked.minor, linked.patch);
// print size_t (see if 32 or 64 bit)
cout << sizeof(size_t) << endl;
// try to set hint
cout << SDL_SetHintWithPriority(SDL_HINT_RENDER_DRIVER, "direct3d11", SDL_HINT_OVERRIDE) << endl;
// print render drivers
cout << endl;
for (int i = 0; i < SDL_GetNumRenderDrivers(); i++){
SDL_RendererInfo rendererInfo = {};
SDL_GetRenderDriverInfo(i, &rendererInfo);
cout << rendererInfo.name << endl;
}
cout << endl;
return 0;
}
Результат (64-битная компиляция):
SDL version 2.0.10
8
1
direct3d
opengl
opengles2
software
Результат (32-битная компиляция):
SDL version 2.0.10
4
1
direct3d
opengl
opengles2
software
Если вам нужна дополнительная информация, пожалуйста, дайте мне знать. Я готов проверить вещи, если это поможет.