SDL3 入门(6):和外部 D3D 交互

获取 D3D 设备

前面讲过在创建渲染器时可以指定图像引擎,例如在 Windows 平台下可以指定使用 D3D11:

SDL_Renderer* renderer = SDL_CreateRenderer(window, "direct3d11");

创建渲染器成功后可以通过 SDL_GetRendererProperties 取出内部的 D3D 设备接口:

ComPtr<ID3D11Device> d3d11_device = static_cast<ID3D11Device*>(SDL_GetPointerProperty(
        SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_D3D11_DEVICE_POINTER, nullptr));

遗憾的是我们无法在外部创建 D3D 设备然后传递给 SDL 用来创建渲染器,也没有更多的 D3D 创建参数可以设置,这导致一些特殊需求无法实现。比如说系统有两张显卡时无法自由的选择使用哪张显卡而只能使用默认的。不过无论如何,SDL3 能指定图形引擎和取出 D3D 设备已经是一个巨大的进步。

更重要的一个特性是我们可以使用类似的方式从 SDL 纹理中取出原始的 D3D 纹理或者把已有的 D3D 纹理包装成 SDL 纹理然后交给 SDL 渲染器执行渲染。这个特性非常重要,因为这意味着我们可以丝滑的把已有的 D3D 渲染代码和 SDL 结合起来使用,这在 SDL2 里是做不到的。

接下来我们用一个简单的例子来做演示。

渲染 D3D 纹理

首先使用前面拿到的 d3d11_device 创建一个 2D 纹理并填充图像数据,依然是 2x2 大小,SDL_PIXELFORMAT_ARGB8888 格式,对应 D3D 中的 DXGI_FORMAT_B8G8R8A8_UNORM 格式:

ComPtr<ID3D11Texture2D> d3d11_texture = CreateTexture2D(d3d11_device.Get(), 2, 2);
if (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值