static enum gs_shader_param_type get_effect_param_type(const char *type) { if (strcmp(type, "float") == 0) return GS_SHADER_PARAM_FLOAT; else if (strcmp(type, "float2") == 0) return GS_SHADER_PARAM_VEC2; else if (strcmp(type, "float3") == 0) return GS_SHADER_PARAM_VEC3; else if (strcmp(type, "float4") == 0) return GS_SHADER_PARAM_VEC4; else if (strcmp(type, "int2") == 0) return GS_SHADER_PARAM_INT2; else if (strcmp(type, "int3") == 0) return GS_SHADER_PARAM_INT3; else if (strcmp(type, "int4") == 0) return GS_SHADER_PARAM_INT4; else if (astrcmp_n(type, "texture", 7) == 0) return GS_SHADER_PARAM_TEXTURE; else if (strcmp(type, "float4x4") == 0) return GS_SHADER_PARAM_MATRIX4X4; else if (strcmp(type, "bool") == 0) return GS_SHADER_PARAM_BOOL; else if (strcmp(type, "int") == 0) return GS_SHADER_PARAM_INT; else if (strcmp(type, "string") == 0) return GS_SHADER_PARAM_STRING; return GS_SHADER_PARAM_UNKNOWN; }
static bool gl_write_intrinsic(struct gl_shader_parser *glsp, struct cf_token **p_token) { struct cf_token *token = *p_token; bool written = true; if (strref_cmp(&token->str, "atan2") == 0) { dstr_cat(&glsp->gl_string, "atan2"); } else if (strref_cmp(&token->str, "ddx") == 0) { dstr_cat(&glsp->gl_string, "dFdx"); } else if (strref_cmp(&token->str, "ddy") == 0) { dstr_cat(&glsp->gl_string, "dFdy"); } else if (strref_cmp(&token->str, "frac") == 0) { dstr_cat(&glsp->gl_string, "fract"); } else if (strref_cmp(&token->str, "lerp") == 0) { dstr_cat(&glsp->gl_string, "mix"); } else if (strref_cmp(&token->str, "rsqrt") == 0) { dstr_cat(&glsp->gl_string, "inversesqrt"); } else if (strref_cmp(&token->str, "saturate") == 0) { written = gl_write_saturate(glsp, &token); } else if (strref_cmp(&token->str, "mul") == 0) { written = gl_write_mul(glsp, &token); } else { struct shader_var *var = sp_getparam(glsp, token); if (var && astrcmp_n(var->type, "texture", 7) == 0) written = gl_write_texture_code(glsp, &token, var); else written = false; } if (written) *p_token = token; return written; }
static void get_attrib_type(const char *mapping, enum attrib_type *type, size_t *index) { if (strcmp(mapping, "POSITION") == 0) { *type = ATTRIB_POSITION; } else if (strcmp(mapping, "NORMAL") == 0) { *type = ATTRIB_NORMAL; } else if (strcmp(mapping, "TANGENT") == 0) { *type = ATTRIB_TANGENT; } else if (strcmp(mapping, "COLOR") == 0) { *type = ATTRIB_COLOR; } else if (astrcmp_n(mapping, "TEXCOORD", 8) == 0) { *type = ATTRIB_TEXCOORD; *index = (*(mapping+8)) - '0'; return; } else if (strcmp(mapping, "TARGET") == 0) { *type = ATTRIB_TARGET; } *index = 0; }
static int ep_parse_param_assignment_val(struct effect_parser *ep, struct ep_param *param) { if (param->is_texture) return ep_parse_param_assign_texture(ep, param); else if (strcmp(param->type, "int") == 0) return ep_parse_param_assign_intfloat(ep, param, false); else if (strcmp(param->type, "float") == 0) return ep_parse_param_assign_intfloat(ep, param, true); else if (astrcmp_n(param->type, "int", 3) == 0) return ep_parse_param_assign_intfloat_array(ep, param, false); else if (astrcmp_n(param->type, "float", 5) == 0) return ep_parse_param_assign_intfloat_array(ep, param, true); else if (astrcmp_n(param->type, "string", 6) == 0) return ep_parse_param_assign_string(ep, param); else if (strcmp(param->type, "bool") == 0) return ep_parse_param_assign_bool(ep, param); cf_adderror(&ep->cfp, "Invalid type '$1' used for assignment", LEX_ERROR, param->type, NULL, NULL); return PARSE_CONTINUE; }
static int sp_parse_param_assignment_val(struct shader_parser *sp, struct shader_var *param) { if (strcmp(param->type, "int") == 0) return sp_parse_param_assign_intfloat(sp, param, false); else if (strcmp(param->type, "float") == 0) return sp_parse_param_assign_intfloat(sp, param, true); else if (astrcmp_n(param->type, "float", 5) == 0) return sp_parse_param_assign_float_array(sp, param); cf_adderror(&sp->cfp, "Invalid type '$1' used for assignment", LEX_ERROR, param->type, NULL, NULL); return PARSE_CONTINUE; }
size_t os_fread_utf8(FILE *file, char **pstr) { size_t size = 0; size_t len = 0; *pstr = NULL; fseek(file, 0, SEEK_END); size = (size_t)os_ftelli64(file); if (size > 0) { char bom[3]; char *utf8str; off_t offset; bom[0] = 0; bom[1] = 0; bom[2] = 0; /* remove the ghastly BOM if present */ fseek(file, 0, SEEK_SET); fread(bom, 1, 3, file); offset = (astrcmp_n(bom, "\xEF\xBB\xBF", 3) == 0) ? 3 : 0; size -= offset; if (size == 0) return 0; utf8str = bmalloc(size+1); fseek(file, offset, SEEK_SET); size = fread(utf8str, 1, size, file); if (size == 0) { bfree(utf8str); return 0; } utf8str[size] = 0; *pstr = utf8str; } return len; }
static inline int cmp_type(const char *name, const size_t name_len, const char *type, const size_t type_len) { size_t min_len = (name_len < type_len) ? type_len : name_len; return astrcmp_n(name, type, min_len); }
bool AutoConfig::CanTestServer(const char *server) { if (!testRegions || (regionUS && regionEU && regionAsia && regionOther)) return true; if (service == Service::Twitch) { if (astrcmp_n(server, "US West:", 8) == 0 || astrcmp_n(server, "US East:", 8) == 0 || astrcmp_n(server, "US Central:", 11) == 0) { return regionUS; } else if (astrcmp_n(server, "EU:", 3) == 0) { return regionEU; } else if (astrcmp_n(server, "Asia:", 5) == 0) { return regionAsia; } else if (regionOther) { return true; } } else if (service == Service::Smashcast) { if (strcmp(server, "Default") == 0) { return true; } else if (astrcmp_n(server, "US-West:", 8) == 0 || astrcmp_n(server, "US-East:", 8) == 0) { return regionUS; } else if (astrcmp_n(server, "EU-", 3) == 0) { return regionEU; } else if (astrcmp_n(server, "South Korea:", 12) == 0 || astrcmp_n(server, "Asia:", 5) == 0 || astrcmp_n(server, "China:", 6) == 0) { return regionAsia; } else if (regionOther) { return true; } } else { return true; } return false; }