提交 9b238ef7 编写于 作者: J jp9000

libobs: Add obs_get_opaque_effect function

This returns a common effect useful for rendering an image with the
alpha channel overridden to 1.0.
上级 e4305d14
uniform float4x4 ViewProj;
uniform texture2d image;
sampler_state def_sampler {
Filter = Linear;
AddressU = Clamp;
AddressV = Clamp;
};
struct VertInOut {
float4 pos : POSITION;
float2 uv : TEXCOORD0;
};
VertInOut VSDefault(VertInOut vert_in)
{
VertInOut vert_out;
vert_out.pos = mul(float4(vert_in.pos.xyz, 1.0), ViewProj);
vert_out.uv = vert_in.uv;
return vert_out;
}
float4 PSDraw(VertInOut vert_in) : TARGET
{
return float4(image.Sample(def_sampler, vert_in.uv).rgb, 1.0);
}
technique Draw
{
pass
{
vertex_shader = VSDefault(vert_in);
pixel_shader = PSDraw(vert_in);
}
}
......@@ -147,6 +147,7 @@ struct obs_core_video {
struct circlebuf vframe_info_buffer;
gs_effect_t *default_effect;
gs_effect_t *default_rect_effect;
gs_effect_t *opaque_effect;
gs_effect_t *solid_effect;
gs_effect_t *conversion_effect;
gs_effect_t *bicubic_effect;
......
......@@ -229,6 +229,11 @@ static int obs_init_graphics(struct obs_video_info *ovi)
bfree(filename);
}
filename = find_libobs_data_file("opaque.effect");
video->opaque_effect = gs_effect_create_from_file(filename,
NULL);
bfree(filename);
filename = find_libobs_data_file("solid.effect");
video->solid_effect = gs_effect_create_from_file(filename,
NULL);
......@@ -255,6 +260,8 @@ static int obs_init_graphics(struct obs_video_info *ovi)
if (!video->default_rect_effect)
success = false;
}
if (!video->opaque_effect)
success = false;
if (!video->solid_effect)
success = false;
if (!video->conversion_effect)
......@@ -411,6 +418,7 @@ static void obs_free_graphics(void)
gs_effect_destroy(video->default_effect);
gs_effect_destroy(video->default_rect_effect);
gs_effect_destroy(video->opaque_effect);
gs_effect_destroy(video->solid_effect);
gs_effect_destroy(video->conversion_effect);
gs_effect_destroy(video->bicubic_effect);
......@@ -1165,6 +1173,12 @@ gs_effect_t *obs_get_default_rect_effect(void)
return obs->video.default_rect_effect;
}
gs_effect_t *obs_get_opaque_effect(void)
{
if (!obs) return NULL;
return obs->video.opaque_effect;
}
gs_effect_t *obs_get_solid_effect(void)
{
if (!obs) return NULL;
......
......@@ -494,6 +494,9 @@ EXPORT gs_effect_t *obs_get_default_effect(void);
/** Returns the default effect for generic RGB/YUV drawing using texture_rect */
EXPORT gs_effect_t *obs_get_default_rect_effect(void);
/** Returns the default effect for generic RGB/YUV drawing (alpha set to 1) */
EXPORT gs_effect_t *obs_get_opaque_effect(void);
/** Returns the solid effect for drawing solid colors */
EXPORT gs_effect_t *obs_get_solid_effect(void);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册