Skip to content

Commit cd83276

Browse files
committed
shaders now support nullable values and FlxGraphic
1 parent 2f2bad2 commit cd83276

File tree

1 file changed

+20
-21
lines changed

1 file changed

+20
-21
lines changed

source/funkin/backend/shaders/FunkinShader.hx

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,20 @@
11
package funkin.backend.shaders;
22

3+
import flixel.graphics.FlxGraphic;
4+
import flixel.system.FlxAssets.FlxShader;
35
import haxe.Exception;
46
import hscript.IHScriptCustomBehaviour;
5-
import flixel.graphics.tile.FlxGraphicsShader;
6-
import openfl.display3D.Program3D;
7-
import flixel.system.FlxAssets.FlxShader;
8-
9-
import openfl.display3D._internal.GLProgram;
10-
import openfl.display3D._internal.GLShader;
11-
import openfl.utils._internal.Log;
7+
import lime.utils.Float32Array;
128
import openfl.display.BitmapData;
9+
import openfl.display.ShaderInput;
1310
import openfl.display.ShaderParameter;
1411
import openfl.display.ShaderParameterType;
15-
import openfl.display.ShaderInput;
16-
import lime.utils.Float32Array;
12+
import openfl.display3D._internal.GLProgram;
13+
import openfl.display3D._internal.GLShader;
14+
import openfl.utils._internal.Log;
1715

1816
using StringTools;
1917

20-
import openfl.display.ShaderParameter;
21-
import openfl.display.BitmapData;
22-
import openfl.display.ShaderInput;
23-
2418
@:access(openfl.display3D.Context3D)
2519
@:access(openfl.display3D.Program3D)
2620
@:access(openfl.display.ShaderInput)
@@ -195,7 +189,7 @@ class FunkinShader extends FlxShader implements IHScriptCustomBehaviour {
195189

196190
var useBackCompat:Bool = true;
197191
for (regex in ShaderTemplates.vertBackCompatVarList) if (!regex.match(value)) useBackCompat = false;
198-
192+
199193
value = value.replace("#pragma header", useBackCompat ? ShaderTemplates.vertHeaderBackCompat : ShaderTemplates.vertHeader).replace("#pragma body", useBackCompat ? ShaderTemplates.vertBodyBackCompat : ShaderTemplates.vertBody);
200194
if (value != __glVertexSource)
201195
{
@@ -495,37 +489,42 @@ class FunkinShader extends FlxShader implements IHScriptCustomBehaviour {
495489
} else {
496490
var field = Reflect.field(data, name);
497491
var cl = Type.getClassName(Type.getClass(field));
492+
var isNotNull = val != null;
498493
// cant do "field is ShaderInput" for some reason
499494
if (cl.startsWith("openfl.display.ShaderParameter")) {
500495
if (field.__length <= 1) {
501496
// that means we wait for a single number, instead of an array
502-
if (field.__isInt && !(val is Int)) {
497+
if (field.__isInt && isNotNull && !(val is Int)) {
503498
throw new ShaderTypeException(name, Type.getClass(val), 'Int');
504499
return null;
505500
} else
506-
if (field.__isBool && !(val is Bool)) {
501+
if (field.__isBool && isNotNull && !(val is Bool)) {
507502
throw new ShaderTypeException(name, Type.getClass(val), 'Bool');
508503
return null;
509504
} else
510-
if (field.__isFloat && !(val is Float)) {
505+
if (field.__isFloat && isNotNull && !(val is Float)) {
511506
throw new ShaderTypeException(name, Type.getClass(val), 'Float');
512507
return null;
513508
}
514-
return field.value = [val];
509+
return field.value = isNotNull ? [val] : null;
515510
} else {
516-
if (!(val is Array)) {
511+
if (isNotNull && !(val is Array)) {
517512
throw new ShaderTypeException(name, Type.getClass(val), Array);
518513
return null;
519514
}
520515
return field.value = val;
521516
}
522517
} else if (cl.startsWith("openfl.display.ShaderInput")) {
523518
// shader input!!
524-
if (!(val is BitmapData)) {
519+
var bitmap:BitmapData;
520+
if (!isNotNull) bitmap = null;
521+
else if (val is FlxGraphic) bitmap = val.bitmap;
522+
else if (val is BitmapData) bitmap = val;
523+
else {
525524
throw new ShaderTypeException(name, Type.getClass(val), BitmapData);
526525
return null;
527526
}
528-
field.input = cast val;
527+
field.input = bitmap;
529528
}
530529
}
531530

0 commit comments

Comments
 (0)