Преглед изворни кода

libobs-opengl: Allow omission of sampler in texture calls

John R. Bradley пре 10 година
родитељ
комит
acf640b40c
1 измењених фајлова са 13 додато и 13 уклоњено
  1. 13 13
      libobs-opengl/gl-shaderparser.c

+ 13 - 13
libobs-opengl/gl-shaderparser.c

@@ -300,22 +300,22 @@ static bool gl_write_saturate(struct gl_shader_parser *glsp,
 }
 }
 
 
 static inline bool gl_write_texture_call(struct gl_shader_parser *glsp,
 static inline bool gl_write_texture_call(struct gl_shader_parser *glsp,
-		struct shader_var *var, const char *call)
+		struct shader_var *var, const char *call, bool sampler)
 {
 {
 	struct cf_parser *cfp = &glsp->parser.cfp;
 	struct cf_parser *cfp = &glsp->parser.cfp;
 	size_t sampler_id = (size_t)-1;
 	size_t sampler_id = (size_t)-1;
 
 
 	if (!cf_next_token(cfp))    return false;
 	if (!cf_next_token(cfp))    return false;
 	if (!cf_token_is(cfp, "(")) return false;
 	if (!cf_token_is(cfp, "(")) return false;
-	if (!cf_next_token(cfp))    return false;
-
-	sampler_id = sp_getsampler(glsp, cfp->cur_token);
-	if (sampler_id == (size_t)-1) return false;
 
 
-	if (!cf_next_token(cfp))    return false;
-	if (!cf_token_is(cfp, ",")) return false;
-
-	var->gl_sampler_id = sampler_id;
+	if (sampler) {
+		if (!cf_next_token(cfp))    return false;
+		sampler_id = sp_getsampler(glsp, cfp->cur_token);
+		if (sampler_id == (size_t) -1) return false;
+		var->gl_sampler_id = sampler_id;
+		if (!cf_next_token(cfp))    return false;
+		if (!cf_token_is(cfp, ",")) return false;
+	}
 
 
 	dstr_cat(&glsp->gl_string, call);
 	dstr_cat(&glsp->gl_string, call);
 	dstr_cat(&glsp->gl_string, "(");
 	dstr_cat(&glsp->gl_string, "(");
@@ -337,13 +337,13 @@ static bool gl_write_texture_code(struct gl_shader_parser *glsp,
 	if (!cf_next_token(cfp))    return false;
 	if (!cf_next_token(cfp))    return false;
 
 
 	if (cf_token_is(cfp, "Sample"))
 	if (cf_token_is(cfp, "Sample"))
-		written = gl_write_texture_call(glsp, var, "texture");
+		written = gl_write_texture_call(glsp, var, "texture", true);
 	else if (cf_token_is(cfp, "SampleBias"))
 	else if (cf_token_is(cfp, "SampleBias"))
-		written = gl_write_texture_call(glsp, var, "texture");
+		written = gl_write_texture_call(glsp, var, "texture", true);
 	else if (cf_token_is(cfp, "SampleGrad"))
 	else if (cf_token_is(cfp, "SampleGrad"))
-		written = gl_write_texture_call(glsp, var, "textureGrad");
+		written = gl_write_texture_call(glsp, var, "textureGrad", true);
 	else if (cf_token_is(cfp, "SampleLevel"))
 	else if (cf_token_is(cfp, "SampleLevel"))
-		written = gl_write_texture_call(glsp, var, "textureLod");
+		written = gl_write_texture_call(glsp, var, "textureLod", true);
 
 
 	if (!written)
 	if (!written)
 		return false;
 		return false;