shaders now support nullable values and FlxGraphic
This commit is contained in:
@@ -1,26 +1,20 @@
|
|||||||
package funkin.backend.shaders;
|
package funkin.backend.shaders;
|
||||||
|
|
||||||
|
import flixel.graphics.FlxGraphic;
|
||||||
|
import flixel.system.FlxAssets.FlxShader;
|
||||||
import haxe.Exception;
|
import haxe.Exception;
|
||||||
import hscript.IHScriptCustomBehaviour;
|
import hscript.IHScriptCustomBehaviour;
|
||||||
import flixel.graphics.tile.FlxGraphicsShader;
|
import lime.utils.Float32Array;
|
||||||
import openfl.display3D.Program3D;
|
import openfl.display.BitmapData;
|
||||||
import flixel.system.FlxAssets.FlxShader;
|
import openfl.display.ShaderInput;
|
||||||
|
import openfl.display.ShaderParameter;
|
||||||
|
import openfl.display.ShaderParameterType;
|
||||||
import openfl.display3D._internal.GLProgram;
|
import openfl.display3D._internal.GLProgram;
|
||||||
import openfl.display3D._internal.GLShader;
|
import openfl.display3D._internal.GLShader;
|
||||||
import openfl.utils._internal.Log;
|
import openfl.utils._internal.Log;
|
||||||
import openfl.display.BitmapData;
|
|
||||||
import openfl.display.ShaderParameter;
|
|
||||||
import openfl.display.ShaderParameterType;
|
|
||||||
import openfl.display.ShaderInput;
|
|
||||||
import lime.utils.Float32Array;
|
|
||||||
|
|
||||||
using StringTools;
|
using StringTools;
|
||||||
|
|
||||||
import openfl.display.ShaderParameter;
|
|
||||||
import openfl.display.BitmapData;
|
|
||||||
import openfl.display.ShaderInput;
|
|
||||||
|
|
||||||
@:access(openfl.display3D.Context3D)
|
@:access(openfl.display3D.Context3D)
|
||||||
@:access(openfl.display3D.Program3D)
|
@:access(openfl.display3D.Program3D)
|
||||||
@:access(openfl.display.ShaderInput)
|
@:access(openfl.display.ShaderInput)
|
||||||
@@ -195,7 +189,7 @@ class FunkinShader extends FlxShader implements IHScriptCustomBehaviour {
|
|||||||
|
|
||||||
var useBackCompat:Bool = true;
|
var useBackCompat:Bool = true;
|
||||||
for (regex in ShaderTemplates.vertBackCompatVarList) if (!regex.match(value)) useBackCompat = false;
|
for (regex in ShaderTemplates.vertBackCompatVarList) if (!regex.match(value)) useBackCompat = false;
|
||||||
|
|
||||||
value = value.replace("#pragma header", useBackCompat ? ShaderTemplates.vertHeaderBackCompat : ShaderTemplates.vertHeader).replace("#pragma body", useBackCompat ? ShaderTemplates.vertBodyBackCompat : ShaderTemplates.vertBody);
|
value = value.replace("#pragma header", useBackCompat ? ShaderTemplates.vertHeaderBackCompat : ShaderTemplates.vertHeader).replace("#pragma body", useBackCompat ? ShaderTemplates.vertBodyBackCompat : ShaderTemplates.vertBody);
|
||||||
if (value != __glVertexSource)
|
if (value != __glVertexSource)
|
||||||
{
|
{
|
||||||
@@ -495,25 +489,26 @@ class FunkinShader extends FlxShader implements IHScriptCustomBehaviour {
|
|||||||
} else {
|
} else {
|
||||||
var field = Reflect.field(data, name);
|
var field = Reflect.field(data, name);
|
||||||
var cl = Type.getClassName(Type.getClass(field));
|
var cl = Type.getClassName(Type.getClass(field));
|
||||||
|
var isNotNull = val != null;
|
||||||
// cant do "field is ShaderInput" for some reason
|
// cant do "field is ShaderInput" for some reason
|
||||||
if (cl.startsWith("openfl.display.ShaderParameter")) {
|
if (cl.startsWith("openfl.display.ShaderParameter")) {
|
||||||
if (field.__length <= 1) {
|
if (field.__length <= 1) {
|
||||||
// that means we wait for a single number, instead of an array
|
// that means we wait for a single number, instead of an array
|
||||||
if (field.__isInt && !(val is Int)) {
|
if (field.__isInt && isNotNull && !(val is Int)) {
|
||||||
throw new ShaderTypeException(name, Type.getClass(val), 'Int');
|
throw new ShaderTypeException(name, Type.getClass(val), 'Int');
|
||||||
return null;
|
return null;
|
||||||
} else
|
} else
|
||||||
if (field.__isBool && !(val is Bool)) {
|
if (field.__isBool && isNotNull && !(val is Bool)) {
|
||||||
throw new ShaderTypeException(name, Type.getClass(val), 'Bool');
|
throw new ShaderTypeException(name, Type.getClass(val), 'Bool');
|
||||||
return null;
|
return null;
|
||||||
} else
|
} else
|
||||||
if (field.__isFloat && !(val is Float)) {
|
if (field.__isFloat && isNotNull && !(val is Float)) {
|
||||||
throw new ShaderTypeException(name, Type.getClass(val), 'Float');
|
throw new ShaderTypeException(name, Type.getClass(val), 'Float');
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return field.value = [val];
|
return field.value = isNotNull ? [val] : null;
|
||||||
} else {
|
} else {
|
||||||
if (!(val is Array)) {
|
if (isNotNull && !(val is Array)) {
|
||||||
throw new ShaderTypeException(name, Type.getClass(val), Array);
|
throw new ShaderTypeException(name, Type.getClass(val), Array);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -521,11 +516,15 @@ class FunkinShader extends FlxShader implements IHScriptCustomBehaviour {
|
|||||||
}
|
}
|
||||||
} else if (cl.startsWith("openfl.display.ShaderInput")) {
|
} else if (cl.startsWith("openfl.display.ShaderInput")) {
|
||||||
// shader input!!
|
// shader input!!
|
||||||
if (!(val is BitmapData)) {
|
var bitmap:BitmapData;
|
||||||
|
if (!isNotNull) bitmap = null;
|
||||||
|
else if (val is FlxGraphic) bitmap = val.bitmap;
|
||||||
|
else if (val is BitmapData) bitmap = val;
|
||||||
|
else {
|
||||||
throw new ShaderTypeException(name, Type.getClass(val), BitmapData);
|
throw new ShaderTypeException(name, Type.getClass(val), BitmapData);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
field.input = cast val;
|
field.input = bitmap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user