Skip to content
UMU edited this page Jan 6, 2021 · 1 revision

SDL2

问题

有小伙伴反馈:按照 README 测试 video_source -> cge -> cgc,结果发现 cgc 啥都没显示。

后来查明她直接用 SDL2 官方编译好的 DLL,其 render drivers 没有 direct3d11。video_source 跑起来后,用的是老式 D3D9 渲染驱动,而它的代码只考虑 D3D11。

目前,我们已经给 video_source 加上提示,如果没有 direct3d11 会警告。

解决

以下是 SDL2 官方编译好的 DLL 的信息:

Number of render drivers: 4

[0] direct3d
        flags: SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE
        num_texture_formats: 1
                (0) SDL_PIXELFORMAT_ARGB8888
        max_texture_width: 0
        max_texture_height: 0
[1] opengl
        flags: SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE
        num_texture_formats: 4
                (0) SDL_PIXELFORMAT_ARGB8888
                (1) SDL_PIXELFORMAT_ABGR8888
                (2) SDL_PIXELFORMAT_RGB888
                (3) SDL_PIXELFORMAT_BGR888
        max_texture_width: 0
        max_texture_height: 0
[2] opengles2
        flags: SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE
        num_texture_formats: 4
                (0) SDL_PIXELFORMAT_ARGB8888
                (1) SDL_PIXELFORMAT_ABGR8888
                (2) SDL_PIXELFORMAT_RGB888
                (3) SDL_PIXELFORMAT_BGR888
        max_texture_width: 0
        max_texture_height: 0
[3] software
        flags: SDL_RENDERER_SOFTWARE | SDL_RENDERER_TARGETTEXTURE
        num_texture_formats: 8
                (0) SDL_PIXELFORMAT_ARGB8888
                (1) SDL_PIXELFORMAT_ABGR8888
                (2) SDL_PIXELFORMAT_RGBA8888
                (3) SDL_PIXELFORMAT_BGRA8888
                (4) SDL_PIXELFORMAT_RGB888
                (5) SDL_PIXELFORMAT_BGR888
                (6) SDL_PIXELFORMAT_RGB565
                (7) SDL_PIXELFORMAT_RGB555
        max_texture_width: 0
        max_texture_height: 0

为了让 SDL2 使用 DXGI(D3D11)需要以下步骤:

1. 开启 SDL_VIDEO_RENDER_D3D11 编译;

Number of render drivers: 5

[0] direct3d
        flags: SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE
        num_texture_formats: 1
                (0) SDL_PIXELFORMAT_ARGB8888
        max_texture_width: 0
        max_texture_height: 0
[1] direct3d11
        flags: SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE
        num_texture_formats: 6
                (0) SDL_PIXELFORMAT_ARGB8888
                (1) SDL_PIXELFORMAT_RGB888
                (2) SDL_PIXELFORMAT_YV12
                (3) SDL_PIXELFORMAT_IYUV
                (4) SDL_PIXELFORMAT_NV12
                (5) SDL_PIXELFORMAT_NV21
        max_texture_width: 0
        max_texture_height: 0
[2] opengl
        flags: SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE
        num_texture_formats: 4
                (0) SDL_PIXELFORMAT_ARGB8888
                (1) SDL_PIXELFORMAT_ABGR8888
                (2) SDL_PIXELFORMAT_RGB888
                (3) SDL_PIXELFORMAT_BGR888
        max_texture_width: 0
        max_texture_height: 0
[3] opengles2
        flags: SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE
        num_texture_formats: 4
                (0) SDL_PIXELFORMAT_ARGB8888
                (1) SDL_PIXELFORMAT_ABGR8888
                (2) SDL_PIXELFORMAT_RGB888
                (3) SDL_PIXELFORMAT_BGR888
        max_texture_width: 0
        max_texture_height: 0
[4] software
        flags: SDL_RENDERER_SOFTWARE | SDL_RENDERER_TARGETTEXTURE
        num_texture_formats: 8
                (0) SDL_PIXELFORMAT_ARGB8888
                (1) SDL_PIXELFORMAT_ABGR8888
                (2) SDL_PIXELFORMAT_RGBA8888
                (3) SDL_PIXELFORMAT_BGRA8888
                (4) SDL_PIXELFORMAT_RGB888
                (5) SDL_PIXELFORMAT_BGR888
                (6) SDL_PIXELFORMAT_RGB565
                (7) SDL_PIXELFORMAT_RGB555
        max_texture_width: 0
        max_texture_height: 0

2. 对 SDL 程序进行改造

主要是 SDL_CreateRenderer 的 index 参数传递正确的渲染驱动序号。

其它地方可能导致稍微不同,有问题具体分析。

Clone this wiki locally