SDL2: Не удается заставить direct3d11 отображаться в качестве средства визуализации? - PullRequest
1 голос
/ 17 января 2020

Я пытаюсь заставить 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

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать. Я готов проверить вещи, если это поможет.

...