Răsfoiți Sursa

Prevent cast int to Dyn in Shader's getParamValue (#1198)

Yuxiao Mao 1 an în urmă
părinte
comite
f3084a18bf
3 a modificat fișierele cu 8 adăugiri și 3 ștergeri
  1. 3 1
      h3d/impl/RenderContext.hx
  2. 4 1
      hxsl/DynamicShader.hx
  3. 1 1
      hxsl/Macros.hx

+ 3 - 1
h3d/impl/RenderContext.hx

@@ -247,11 +247,13 @@ class RenderContext {
 			while( p != null ) {
 				var v : Dynamic;
 				if( p.perObjectGlobal == null ) {
-					if( p.type == TFloat ) {
+					switch( p.type ) {
+					case TFloat, TInt:
 						var i = getInstance(p.instance);
 						ptr[p.pos] = i.getParamFloatValue(p.index);
 						p = p.next;
 						continue;
+					default:
 					}
 					v = getInstance(p.instance).getParamValue(p.index);
 					if( v == null ) throw "Missing param value " + curInstanceValue + "." + p.name;

+ 4 - 1
hxsl/DynamicShader.hx

@@ -35,7 +35,10 @@ class DynamicShader extends Shader {
 	function addVarIndex(v:hxsl.Ast.TVar, ?access : Access, ?defObj : Dynamic ) {
 		if( v.kind != Param )
 			return;
-		var isFloat = v.type == TFloat && access == null;
+		var isFloat = switch(v.type) {
+			case TFloat, TInt: access == null;
+			default: false;
+		}
 		var vid = isFloat ? floats.length : values.length;
 		if( access != null )
 			access = new Access(Structure, access.index, access.fields.copy());

+ 1 - 1
hxsl/Macros.hx

@@ -311,7 +311,7 @@ class Macros {
 				args : [ { name : "index", type : macro : Int } ],
 				expr : {
 					expr : EBlock([
-						{ expr : ESwitch(macro index, [for( i in 0...tparams.length ) if( tparams[i] == TFloat ) { values : [macro $v{i}], expr : macro return ${eparams[i]} }], macro {}), pos : pos },
+						{ expr : ESwitch(macro index, [for( i in 0...tparams.length ) if( tparams[i] == TFloat || tparams[i] == TInt ) { values : [macro $v{i}], expr : macro return ${eparams[i]} }], macro {}), pos : pos },
 						macro return 0.,
 					]),
 					pos : pos,