Texture2D.SetPixelData does not work.
DeltaNeverUsed
Writing a U# program like so, will fail with: Method is not exposed to Udon: 'texture.SetPixelData(d, 0, 0)'. Even though it is exposed as UnityEngineTexture2D.__ctor__SystemInt32_SystemInt32_UnityEngineTextureFormat_SystemBoolean__UnityEngineTexture2D
U# Code:
var texture = new Texture2D(
2,
2,
TextureFormat.RGBA32,
false
);
uint[] d = new uint[2 * 2 * 4];
texture.SetPixelData(d, 0, 0);
However it will compile in udon graph, but the data input will be a Object[], and will crash with anything passed to it.
Manually writing some udon assembly will compile again, but will also crash at runtime
udon assembly:
.data_start
.export tex
.export arr
.export num0
.export num1
.export f
.export tex_format
tex: %UnityEngineTexture2D, null
arr: %SystemSingleArray, null
num0: %SystemInt32, null
num1: %SystemInt32, null
f: %SystemBoolean, null
tex_format: %UnityEngineTextureFormat, null
.data_end
.code_start
.export Test
Test:
PUSH, num1
PUSH, num1
PUSH, tex_format
PUSH, f
PUSH, tex
EXTERN, "UnityEngineTexture2D.__ctor__SystemInt32_SystemInt32_UnityEngineTextureFormat_SystemBoolean__UnityEngineTexture2D"
PUSH, tex
PUSH, arr
PUSH, num0
PUSH, num0
EXTERN, "UnityEngineTexture2D.__SetPixelData__TArray_SystemInt32_SystemInt32__SystemVoid"
JUMP, 0xFFFFFFFC
.code_end
udon assembly crash:
VRC.Udon.VM.UdonVMException: The VM encountered an error!
Exception Message:
An exception occurred during EXTERN to 'UnityEngineTexture2D.__SetPixelData__TArray_SystemInt32_SystemInt32__SystemVoid'.
Parameter Addresses: 0x00000000, 0x00000001, 0x00000002, 0x00000002
Cannot retrieve heap variable of type 'Single[]' as type 'Object[]'
----------------------
Program Counter was at: 80
----------------------
Stack Dump:
----------------------
Heap Dump:
0x00000000: (UnityEngine.Texture2D)
0x00000001: System.Single[]
0x00000002: 0
0x00000003: 1
0x00000004: False
0x00000005: RGBAFloat
0x00000006: UnityEngineTexture2D.__ctor__SystemInt32_SystemInt32_UnityEngineTextureFormat_SystemBoolean__UnityEngineTexture2D
0x00000007: UnityEngineTexture2D.__SetPixelData__TArray_SystemInt32_SystemInt32__SystemVoid
----------------------
Inner Exception:
---> VRC.Udon.VM.UdonVMException: An exception occurred during EXTERN to 'UnityEngineTexture2D.__SetPixelData__TArray_SystemInt32_SystemInt32__SystemVoid'.
Log In