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)
- int obs_init_video(struct obs_video_info *ovi)
- int obs_reset_video(struct obs_video_info *ovi)
- int AttemptToResetVideo(struct obs_video_info *ovi)
- OBSBasic::ResetVideo()
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