Add obs_get_default_rect_effect

This provides a default effect for users of GL_TEXTURE_RECTANGLE/textures
that return true for gs_texture_is_rect
This commit is contained in:
Palana 2014-10-03 15:56:38 +02:00
parent 9c4024f5b3
commit 0f15cc143e
4 changed files with 73 additions and 0 deletions

View File

@ -0,0 +1,55 @@
uniform float4x4 ViewProj;
uniform float4x4 color_matrix;
uniform float3 color_range_min = {0.0, 0.0, 0.0};
uniform float3 color_range_max = {1.0, 1.0, 1.0};
uniform texture_rect 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 PSDrawBare(VertInOut vert_in) : TARGET
{
return image.Sample(def_sampler, vert_in.uv);
}
float4 PSDrawMatrix(VertInOut vert_in) : TARGET
{
float4 yuv = image.Sample(def_sampler, vert_in.uv);
yuv.xyz = clamp(yuv.xyz, color_range_min, color_range_max);
return saturate(mul(float4(yuv.xyz, 1.0), color_matrix));
}
technique Draw
{
pass
{
vertex_shader = VSDefault(vert_in);
pixel_shader = PSDrawBare(vert_in);
}
}
technique DrawMatrix
{
pass
{
vertex_shader = VSDefault(vert_in);
pixel_shader = PSDrawMatrix(vert_in);
}
}

View File

@ -141,6 +141,7 @@ struct obs_core_video {
bool textures_converted[NUM_TEXTURES];
struct obs_source_frame convert_frames[NUM_TEXTURES];
gs_effect_t *default_effect;
gs_effect_t *default_rect_effect;
gs_effect_t *solid_effect;
gs_effect_t *conversion_effect;
gs_stagesurf_t *mapped_surface;

View File

@ -224,6 +224,11 @@ static int obs_init_graphics(struct obs_video_info *ovi)
NULL);
bfree(filename);
filename = find_libobs_data_file("default_rect.effect");
video->default_rect_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);
@ -236,6 +241,8 @@ static int obs_init_graphics(struct obs_video_info *ovi)
if (!video->default_effect)
success = false;
if (!video->default_rect_effect)
success = false;
if (!video->solid_effect)
success = false;
if (!video->conversion_effect)
@ -356,6 +363,7 @@ static void obs_free_graphics(void)
gs_enter_context(video->graphics);
gs_effect_destroy(video->default_effect);
gs_effect_destroy(video->default_rect_effect);
gs_effect_destroy(video->solid_effect);
gs_effect_destroy(video->conversion_effect);
video->default_effect = NULL;
@ -1065,6 +1073,12 @@ gs_effect_t *obs_get_default_effect(void)
return obs->video.default_effect;
}
gs_effect_t *obs_get_default_rect_effect(void)
{
if (!obs) return NULL;
return obs->video.default_rect_effect;
}
gs_effect_t *obs_get_solid_effect(void)
{
if (!obs) return NULL;

View File

@ -459,6 +459,9 @@ EXPORT obs_service_t *obs_get_service_by_name(const char *name);
/** Returns the default effect for generic RGB/YUV drawing */
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 solid effect for drawing solid colors */
EXPORT gs_effect_t *obs_get_solid_effect(void);