RIVEðî›ñÄæêîÐòÔ¶çëóèììåÇéË­�@€P‘Ë ShaderDemojÔ÷ 4widthheight gpuCanvascanvas BasicShadershader GPUPipelinenewvertexfragment vertexLayout colorTargetsformatpipeline uniformDatabluebufferwritef32 GPUBuffersizeusageuniformdata uniformBuffergetBindGroupLayout GPUBindGrouplayoutubosslot bindGroupwriteupdateUniformscolorloadOpclearstoreOpstore clearColorbeginRenderPass setPipeline setBindGroupdrawfinish ImageSamplerclampbilinearimagesrcOver drawImageinitupdatecreate  ‡S6bFbC  $€€6š É 5Ì 56b��7áÌòDK XP� $€�6Ì&6 S! #$ ‚6&$56 ) ±7 %z*+i@$€€      XP�$€�@ÿÿÿÿ$ ‚$%'(ÿÿÿÿ ‡ÌòDK  €66ÌÒ €>p F ‡‡=Fb/,b656 5   7¡7Dq ñ z z † ´ÿb AbÉ!"#$%&ÿÿÿÿ'()*+,A-./01J6 4À€ÌÆ Æ ´ ´ à?23* ÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿ44À€dA@@p@Æ@´@ 2 3*ÊË BasicShaderjÔ–;BTSR #&æ #/2Qk ¼ #ß _ >#a}Þ õ#vs_mainvs_mainfs_mainfs_mainØstruct VertexOutput { @builtin(position) position: vec4, @location(0) uv: vec2, } struct Uniforms { blue: f32, } @group(0) @binding(0) var uniforms: Uniforms; @vertex fn vs_main(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput { var pos: array, 3> = array, 3>(vec2(-1f, -1f), vec2(3f, -1f), vec2(-1f, 3f)); var out: VertexOutput; let p = pos[vertexIndex]; out.position = vec4(p, 0f, 1f); out.uv = ((p * 0.5f) + vec2(0.5f, 0.5f)); let _e26 = out; return _e26; } @fragment fn fs_main(in: VertexOutput) -> @location(0) vec4 { let _e7 = uniforms.blue; return vec4(in.uv.x, in.uv.y, _e7, 1f); }  0ù©Ë†0Ðvs_mainmain²#version 300 es precision highp float; precision highp int; struct VertexOutput { vec4 position; vec2 uv; }; struct Uniforms { float blue; }; smooth out vec2 _vs2fs_location0; void main() { uint vertexIndex = uint(gl_VertexID); vec2 pos[3] = vec2[3](vec2(-1.0, -1.0), vec2(3.0, -1.0), vec2(-1.0, 3.0)); VertexOutput out_ = VertexOutput(vec4(0.0), vec2(0.0)); vec2 p = pos[vertexIndex]; out_.position = vec4(p, 0.0, 1.0); out_.uv = ((p * 0.5) + vec2(0.5, 0.5)); VertexOutput _e26 = out_; gl_Position = _e26.position; _vs2fs_location0 = _e26.uv; gl_Position.yz = vec2(-gl_Position.y, gl_Position.z * 2.0 - gl_Position.w); return; } fs_mainmain #version 300 es precision highp float; precision highp int; struct VertexOutput { vec4 position; vec2 uv; }; struct Uniforms { float blue; }; layout(std140) uniform Uniforms_block_0Fragment { Uniforms _group_0_binding_0_fs; }; smooth in vec2 _vs2fs_location0; layout(location = 0) out vec4 _fs2p_location0; void main() { VertexOutput in_ = VertexOutput(gl_FragCoord, _vs2fs_location0); float _e7 = _group_0_binding_0_fs.blue; _fs2p_location0 = vec4(in_.uv.x, in_.uv.y, _e7, 1.0); return; }  0ù©Ë†0ÐUniforms_block_0Fragmentvs_mainvs_mainfs_mainfs_main@// language: metal1.0 #include #include using metal::uint; struct VertexOutput { metal::float4 position; metal::float2 uv; char _pad2[8]; }; struct Uniforms { float blue; }; struct type_4 { metal::float2 inner[3]; }; struct vs_mainInput { }; struct vs_mainOutput { metal::float4 position [[position]]; metal::float2 uv [[user(loc0), center_perspective]]; }; vertex vs_mainOutput vs_main( uint vertexIndex [[vertex_id]] ) { type_4 pos = type_4 {{metal::float2(-1.0, -1.0), metal::float2(3.0, -1.0), metal::float2(-1.0, 3.0)}}; VertexOutput out = {}; metal::float2 p = pos.inner[vertexIndex]; out.position = metal::float4(p, 0.0, 1.0); out.uv = (p * 0.5) + metal::float2(0.5, 0.5); VertexOutput _e26 = out; const auto _tmp = _e26; return vs_mainOutput { _tmp.position, _tmp.uv }; } struct fs_mainInput { metal::float2 uv [[user(loc0), center_perspective]]; }; struct fs_mainOutput { metal::float4 member_1 [[color(0)]]; }; fragment fs_mainOutput fs_main( fs_mainInput varyings_1 [[stage_in]] , metal::float4 position [[position]] , constant Uniforms& uniforms [[buffer(0)]] ) { const VertexOutput in = { position, varyings_1.uv }; float _e7 = uniforms.blue; return fs_mainOutput { metal::float4(in.uv.x, in.uv.y, _e7, 1.0) }; }  0ù©Ë†0Ðvs_mainmainstruct VertexOutput { float4 position; float2 uv; }; struct Uniforms { float blue; }; static const float2 _26[3] = { float2(-1.0f, -1.0f), float2(3.0f, -1.0f), float2(-1.0f, 3.0f) }; static const VertexOutput _35 = { float4(0.0f, 0.0f, 0.0f, 0.0f), float2(0.0f, 0.0f) }; static float4 gl_Position; static int gl_VertexIndex; static float2 uv; struct SPIRV_Cross_Input { uint gl_VertexIndex : SV_VertexID; }; struct SPIRV_Cross_Output { float2 uv : TEXCOORD0; float4 gl_Position : SV_Position; }; void vert_main() { VertexOutput _out = _35; _out.position = float4(_26[uint(gl_VertexIndex)], 0.0f, 1.0f); _out.uv = (_26[uint(gl_VertexIndex)] * 0.5f) + float2(0.5f, 0.5f); gl_Position = _out.position; uv = _out.uv; } SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { gl_VertexIndex = int(stage_input.gl_VertexIndex); vert_main(); SPIRV_Cross_Output stage_output; stage_output.gl_Position = gl_Position; stage_output.uv = uv; return stage_output; } fs_mainmain2struct VertexOutput { float4 position; float2 uv; }; struct Uniforms { float blue; }; cbuffer uniforms : register(b0) { Uniforms uniforms_1_m0 : packoffset(c0); }; static float4 gl_FragCoord; static float2 uv; static float4 _22; struct SPIRV_Cross_Input { float2 uv : TEXCOORD0; float4 gl_FragCoord : SV_Position; }; struct SPIRV_Cross_Output { float4 _22 : SV_Target0; }; void frag_main() { VertexOutput _15 = { gl_FragCoord, uv }; _22 = float4(_15.uv.x, _15.uv.y, uniforms_1_m0.blue, 1.0f); } SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { gl_FragCoord = stage_input.gl_FragCoord; gl_FragCoord.w = 1.0 / gl_FragCoord.w; uv = stage_input.uv; frag_main(); SPIRV_Cross_Output stage_output; stage_output._22 = _22; return stage_output; }  0ù©Ë†0ÐHSLTUniformsblueÿÿÿÿuniforms_blockuniformsvs_mainvs_mainfs_mainfs_mainì#O GLSL.std.450vs_mainCfs_main<?BCH#H#H#G G "G !G H #G *G GG< G?GB  +       ;  ; ; ;!+€¿,+@@,,, ++€?+ ?,! # %.& ( ++-+1 5 =;=< @;@?;B D K6ø;#";%$&=ù'ø'A()"=*)P,*A+.$->.,Ž/* �0/!A(2$1>20=3$Q43>4A561=7687>68Q93>9ý86Cø:=><=A?P;>AADE -ùFøFQG;QHGQI;QJIAKLE-=MLPNHJM>BNý8 0ù©Ë†0Ð�@§®Ì f à¿ßeûÛGÌE²³¸¯X`„Ô}õTÁÞKÑB(¥Æ­9«ËQ³äì¯ÛKÞ°n#¨"€� E; ³­ ViewModel1µ¶Instance  ‚ÄÃÄÈC–CîìÇMainÛ@À?Ðãblueó€?%(((ÿ¤åæçèéêëìñò(7 Timeline 1;35óDEF€?C