New upstream version 25.0.8+dfsg1

This commit is contained in:
Sebastian Ramacher 2020-05-27 22:57:19 +02:00
parent 8b2e5f2130
commit 8e020cdacb
115 changed files with 1767 additions and 10949 deletions

View file

@ -7,8 +7,11 @@ include_directories(${OPENGL_INCLUDE_DIR})
add_definitions(-DLIBOBS_EXPORTS)
if(WIN32)
set(MODULE_DESCRIPTION "OBS Library OpenGL wrapper")
configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in libobs-opengl.rc)
set(libobs-opengl_PLATFORM_SOURCES
gl-windows.c)
gl-windows.c
libobs-opengl.rc)
elseif(APPLE)
set(libobs-opengl_PLATFORM_SOURCES
gl-cocoa.m)

View file

@ -270,6 +270,7 @@ static inline void gl_write_structs(struct gl_shader_parser *glsp)
* mul -> (change to operator)
* rsqrt -> inversesqrt
* saturate -> (use clamp)
* sincos -> (map to manual sin/cos calls)
* tex* -> texture
* tex*grad -> textureGrad
* tex*lod -> textureLod
@ -301,6 +302,51 @@ static bool gl_write_mul(struct gl_shader_parser *glsp,
return true;
}
static bool gl_write_sincos(struct gl_shader_parser *glsp,
struct cf_token **p_token)
{
struct cf_parser *cfp = &glsp->parser.cfp;
struct dstr var = {0};
bool success = false;
cfp->cur_token = *p_token;
if (!cf_next_token(cfp))
return false;
if (!cf_token_is(cfp, "("))
return false;
dstr_printf(&var, "sincos_var_internal_%d", glsp->sincos_counter++);
dstr_cat(&glsp->gl_string, "float ");
dstr_cat_dstr(&glsp->gl_string, &var);
dstr_cat(&glsp->gl_string, " = ");
gl_write_function_contents(glsp, &cfp->cur_token, ",");
dstr_cat(&glsp->gl_string, "); ");
if (!cf_next_token(cfp))
goto fail;
gl_write_function_contents(glsp, &cfp->cur_token, ",");
dstr_cat(&glsp->gl_string, " = sin(");
dstr_cat_dstr(&glsp->gl_string, &var);
dstr_cat(&glsp->gl_string, "); ");
if (!cf_next_token(cfp))
goto fail;
gl_write_function_contents(glsp, &cfp->cur_token, ")");
dstr_cat(&glsp->gl_string, " = cos(");
dstr_cat_dstr(&glsp->gl_string, &var);
dstr_cat(&glsp->gl_string, ")");
success = true;
fail:
dstr_free(&var);
*p_token = cfp->cur_token;
return success;
}
static bool gl_write_saturate(struct gl_shader_parser *glsp,
struct cf_token **p_token)
{
@ -404,7 +450,7 @@ static bool gl_write_intrinsic(struct gl_shader_parser *glsp,
bool written = true;
if (strref_cmp(&token->str, "atan2") == 0) {
dstr_cat(&glsp->gl_string, "atan2");
dstr_cat(&glsp->gl_string, "atan");
} else if (strref_cmp(&token->str, "ddx") == 0) {
dstr_cat(&glsp->gl_string, "dFdx");
} else if (strref_cmp(&token->str, "ddy") == 0) {
@ -421,6 +467,8 @@ static bool gl_write_intrinsic(struct gl_shader_parser *glsp,
written = gl_write_saturate(glsp, &token);
} else if (strref_cmp(&token->str, "mul") == 0) {
written = gl_write_mul(glsp, &token);
} else if (strref_cmp(&token->str, "sincos") == 0) {
written = gl_write_sincos(glsp, &token);
} else {
struct shader_var *var = sp_getparam(glsp, token);
if (var && astrcmp_n(var->type, "texture", 7) == 0)

View file

@ -48,6 +48,7 @@ struct gl_shader_parser {
const char *output_prefix;
struct shader_parser parser;
struct dstr gl_string;
int sincos_counter;
DARRAY(uint32_t) texture_samplers;
DARRAY(struct gl_parser_attrib) attribs;
@ -70,6 +71,7 @@ static inline void gl_shader_parser_init(struct gl_shader_parser *glsp,
dstr_init(&glsp->gl_string);
da_init(glsp->texture_samplers);
da_init(glsp->attribs);
glsp->sincos_counter = 1;
}
static inline void gl_shader_parser_free(struct gl_shader_parser *glsp)

View file

@ -1264,7 +1264,6 @@ void device_set_viewport(gs_device_t *device, int x, int y, int width,
int height)
{
uint32_t base_height = 0;
int gl_y = 0;
/* GL uses bottom-up coordinates for viewports. We want top-down */
if (device->cur_render_target) {
@ -1274,7 +1273,8 @@ void device_set_viewport(gs_device_t *device, int x, int y, int width,
gl_getclientsize(device->cur_swap, &dw, &base_height);
}
if (base_height)
GLint gl_y = y;
if (base_height && !device->cur_fbo)
gl_y = base_height - y - height;
glViewport(x, gl_y, width, height);