|
1 | 1 | package funkin.backend.shaders; |
2 | 2 |
|
| 3 | +import flixel.graphics.FlxGraphic; |
| 4 | +import flixel.system.FlxAssets.FlxShader; |
3 | 5 | import haxe.Exception; |
4 | 6 | 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; |
12 | 8 | import openfl.display.BitmapData; |
| 9 | +import openfl.display.ShaderInput; |
13 | 10 | import openfl.display.ShaderParameter; |
14 | 11 | 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; |
17 | 15 |
|
18 | 16 | using StringTools; |
19 | 17 |
|
20 | | -import openfl.display.ShaderParameter; |
21 | | -import openfl.display.BitmapData; |
22 | | -import openfl.display.ShaderInput; |
23 | | - |
24 | 18 | @:access(openfl.display3D.Context3D) |
25 | 19 | @:access(openfl.display3D.Program3D) |
26 | 20 | @:access(openfl.display.ShaderInput) |
@@ -195,7 +189,7 @@ class FunkinShader extends FlxShader implements IHScriptCustomBehaviour { |
195 | 189 |
|
196 | 190 | var useBackCompat:Bool = true; |
197 | 191 | for (regex in ShaderTemplates.vertBackCompatVarList) if (!regex.match(value)) useBackCompat = false; |
198 | | - |
| 192 | + |
199 | 193 | value = value.replace("#pragma header", useBackCompat ? ShaderTemplates.vertHeaderBackCompat : ShaderTemplates.vertHeader).replace("#pragma body", useBackCompat ? ShaderTemplates.vertBodyBackCompat : ShaderTemplates.vertBody); |
200 | 194 | if (value != __glVertexSource) |
201 | 195 | { |
@@ -495,37 +489,42 @@ class FunkinShader extends FlxShader implements IHScriptCustomBehaviour { |
495 | 489 | } else { |
496 | 490 | var field = Reflect.field(data, name); |
497 | 491 | var cl = Type.getClassName(Type.getClass(field)); |
| 492 | + var isNotNull = val != null; |
498 | 493 | // cant do "field is ShaderInput" for some reason |
499 | 494 | if (cl.startsWith("openfl.display.ShaderParameter")) { |
500 | 495 | if (field.__length <= 1) { |
501 | 496 | // 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)) { |
503 | 498 | throw new ShaderTypeException(name, Type.getClass(val), 'Int'); |
504 | 499 | return null; |
505 | 500 | } else |
506 | | - if (field.__isBool && !(val is Bool)) { |
| 501 | + if (field.__isBool && isNotNull && !(val is Bool)) { |
507 | 502 | throw new ShaderTypeException(name, Type.getClass(val), 'Bool'); |
508 | 503 | return null; |
509 | 504 | } else |
510 | | - if (field.__isFloat && !(val is Float)) { |
| 505 | + if (field.__isFloat && isNotNull && !(val is Float)) { |
511 | 506 | throw new ShaderTypeException(name, Type.getClass(val), 'Float'); |
512 | 507 | return null; |
513 | 508 | } |
514 | | - return field.value = [val]; |
| 509 | + return field.value = isNotNull ? [val] : null; |
515 | 510 | } else { |
516 | | - if (!(val is Array)) { |
| 511 | + if (isNotNull && !(val is Array)) { |
517 | 512 | throw new ShaderTypeException(name, Type.getClass(val), Array); |
518 | 513 | return null; |
519 | 514 | } |
520 | 515 | return field.value = val; |
521 | 516 | } |
522 | 517 | } else if (cl.startsWith("openfl.display.ShaderInput")) { |
523 | 518 | // 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 { |
525 | 524 | throw new ShaderTypeException(name, Type.getClass(val), BitmapData); |
526 | 525 | return null; |
527 | 526 | } |
528 | | - field.input = cast val; |
| 527 | + field.input = bitmap; |
529 | 528 | } |
530 | 529 | } |
531 | 530 |
|
|
0 commit comments