OBS-D3D11渲染梳理
+ -

D3D11渲染目标视图

2024-08-02 21 0

渲染目标视图通过函数gs_texture_create创建,使用device_set_render_target将创建好的渲染视图设为当前的渲染视图。最后在D3D11渲染时会根据urFramebufferSrgb来选择当前渲染视图中的那个,最终调用D3D11的OMSetRenderTargets将其绑定到显卡流水线。

创建默认的渲染纹理视图

  • OBSBasic::OBSInit()
    • OBSBasic::ResetVideo()
      • int AttemptToResetVideo(struct obs_video_info *ovi)
        • int obs_reset_video(struct obs_video_info *ovi)
          • int obs_init_video(struct obs_video_info *ovi)
            • bool obs_init_textures(struct obs_video_info *ovi)

obs_init_textures函数中会根据ovi信息创建纹理

    video->render_texture = gs_texture_create(ovi->base_width,
                          ovi->base_height, GS_RGBA, 1,
                          NULL, GS_RENDER_TARGET);

    video->output_texture = gs_texture_create(ovi->output_width,
                          ovi->output_height, GS_RGBA,1,
                          NULL, GS_RENDER_TARGET);

这里有两个纹理,区别仅是宽度不同。一个是原始的渲染纹理,一个是输出纹理。
如果输出纹理和渲染纹理的大小不同,会自动进行转换。如果相同,则直接使用render_texture作为输出纹理。

创建纹理

这里的纹理是渲染纹理和输出纹理。其中应包括渲染纹理和渲染视图。
D3D11中通过device_texture_create函数创建。

gs_texture_t *device_texture_create(gs_device_t *device, uint32_t width,
                    uint32_t height,
                    enum gs_color_format color_format,
                    uint32_t levels, const uint8_t **data,
                    uint32_t flags)
{

    return new gs_texture_2d(device, width, height, color_format,
                        levels, data, flags, GS_TEXTURE_2D,
                        false);
}

2D纹理的介绍可见:https://www.vaczh.com/article/detail-93.html

0 篇笔记 写笔记

作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!