From 6a984b40d9dcd0f93a14c926587c6b2fbbe70123 Mon Sep 17 00:00:00 2001 From: Sven Balzer <4653051+Kyuusokuna@users.noreply.github.com> Date: Tue, 4 Aug 2026 09:42:25 +0200 Subject: [PATCH] remove vertex_buffer and index_buffer for characters and character shadows refactor world shader vertex position calculation --- src/main.cpp | 35 +-------- src/renderer_sdlgpu.c | 58 +++------------ src/renderer_wgpu.c | 54 +++----------- src/shaders/spirv/character.spv | Bin 2832 -> 3448 bytes src/shaders/spirv/character_shadow.spv | Bin 2692 -> 3200 bytes src/shaders/spirv/world.spv | Bin 5252 -> 4740 bytes src/shaders/src/character.slang | 20 ++++-- src/shaders/src/character_shadow.slang | 22 ++++-- src/shaders/src/world.slang | 22 +++--- src/shaders/wgsl/character.wgsl | 75 ++++++++++++++----- src/shaders/wgsl/character_shadow.wgsl | 95 ++++++++++++++++--------- src/shaders/wgsl/world.wgsl | 72 +++++++++++-------- 12 files changed, 229 insertions(+), 224 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 53f15fe..23e970b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -44,8 +44,6 @@ static R_Buffer view_projection_matrix_buffer; static R_Buffer per_frame_buffer; static R_Buffer tint_color_buffer; -static R_Buffer vertex_buffer; -static R_Buffer index_buffer; static R_Buffer player_instance_buffer; static R_Buffer tile_uvs_buffer; @@ -170,23 +168,6 @@ enum Settings_Category { SETTINGS_AUDIO, }; -struct Vertex { - vec3 pos; - vec2 uv; -}; - -static Vertex vertices[] = { - {{ -0.5f, 0.5f, 0.0f }, { 0.0f, 0.0f }}, - {{ -0.5f, -0.5f, 0.0f }, { 0.0f, 1.0f }}, - {{ 0.5f, -0.5f, 0.0f }, { 1.0f, 1.0f }}, - {{ 0.5f, 0.5f, 0.0f }, { 1.0f, 0.0f }}, -}; - -static Uint16 indices[] = { - 0, 1, 2, - 0, 2, 3, -}; - struct Instance { vec2 pos; uint32_t sprite_selection; @@ -892,18 +873,6 @@ static bool init_resources() { return false; } - vertex_buffer = renderer_buffer_create(R_BUFFER_USAGE_VERTEX, sizeof(vertices), vertices, "vertex_buffer"); - if (!vertex_buffer) { - log_error("Failed to create buffer."); - return false; - } - - index_buffer = renderer_buffer_create(R_BUFFER_USAGE_INDEX, sizeof(indices), indices, "index_buffer"); - if (!index_buffer) { - log_error("Failed to create buffer."); - return false; - } - player_instance_buffer = renderer_buffer_create(R_BUFFER_USAGE_VERTEX, sizeof(player_instance), &player_instance, "player_instance_buffer"); if (!player_instance_buffer) { log_error("Failed to create buffer."); @@ -1564,7 +1533,7 @@ static void render_game() { { ZoneScopedN("Draw Player"); renderer_frame_set_shader(R_SHADER_CHARACTER_SHADOW); - renderer_frame_draw(vertex_buffer, index_buffer, player_instance_buffer, 6, 1, &(R_Draw_Resources){ + renderer_frame_draw(NULL, NULL, player_instance_buffer, 6, 1, &(R_Draw_Resources){ .vertex_uniform_buffers = (R_Buffer[]){ view_projection_matrix_buffer }, .num_vertex_uniform_buffers = 1, @@ -1577,7 +1546,7 @@ static void render_game() { }); renderer_frame_set_shader(R_SHADER_CHARACTER); - renderer_frame_draw(vertex_buffer, index_buffer, player_instance_buffer, 6, 1, &(R_Draw_Resources){ + renderer_frame_draw(NULL, NULL, player_instance_buffer, 6, 1, &(R_Draw_Resources){ .vertex_uniform_buffers = (R_Buffer[]){ view_projection_matrix_buffer }, .num_vertex_uniform_buffers = 1, diff --git a/src/renderer_sdlgpu.c b/src/renderer_sdlgpu.c index 8a97ab9..540d4e5 100644 --- a/src/renderer_sdlgpu.c +++ b/src/renderer_sdlgpu.c @@ -343,8 +343,8 @@ void renderer_frame_draw(R_Buffer vertex_buffer, R_Buffer index_buffer, R_Buffer for (int i = 0; i < resources->num_fragment_storage_buffers; i++) SDL_BindGPUFragmentStorageBuffers(render_pass, i, &resources->fragment_storage_buffers[i]->buffer, 1); for (int i = 0; i < resources->num_fragment_uniform_buffers; i++) SDL_PushGPUFragmentUniformData(render_command_buffer, i, resources->fragment_uniform_buffers[i]->cpu_uniform_data, resources->fragment_uniform_buffers[i]->num_bytes); - if (vertex_buffer) SDL_BindGPUVertexBuffers(render_pass, 0, &(SDL_GPUBufferBinding){ .buffer = vertex_buffer->buffer, .offset = 0 }, 1); - if (instance_buffer) SDL_BindGPUVertexBuffers(render_pass, 1, &(SDL_GPUBufferBinding){ .buffer = instance_buffer->buffer, .offset = 0 }, 1); + if (vertex_buffer) SDL_BindGPUVertexBuffers(render_pass, 0, &(SDL_GPUBufferBinding){ .buffer = vertex_buffer->buffer, .offset = 0 }, 1); + if (instance_buffer) SDL_BindGPUVertexBuffers(render_pass, vertex_buffer ? 1 : 0, &(SDL_GPUBufferBinding){ .buffer = instance_buffer->buffer, .offset = 0 }, 1); if (index_buffer) { SDL_BindGPUIndexBuffer(render_pass, &(SDL_GPUBufferBinding){ .buffer = index_buffer->buffer, .offset = 0 }, SDL_GPU_INDEXELEMENTSIZE_16BIT); @@ -454,48 +454,29 @@ bool renderer_init(SDL_Window *window_) { .vertex_buffer_descriptions = (SDL_GPUVertexBufferDescription[]){ { .slot = 0, - .pitch = 20, - .input_rate = SDL_GPU_VERTEXINPUTRATE_VERTEX, - - .instance_step_rate = 0, - }, - { - .slot = 1, .pitch = 12, .input_rate = SDL_GPU_VERTEXINPUTRATE_INSTANCE, .instance_step_rate = 0, }, }, - .num_vertex_buffers = 2, + .num_vertex_buffers = 1, .vertex_attributes = (SDL_GPUVertexAttribute[]){ - { - .location = 0, - .buffer_slot = 0, - .format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT3, - .offset = 0, - }, - { - .location = 1, - .buffer_slot = 0, - .format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT2, - .offset = 12, - }, { .location = 2, - .buffer_slot = 1, + .buffer_slot = 0, .format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT2, .offset = 0, }, { .location = 3, - .buffer_slot = 1, + .buffer_slot = 0, .format = SDL_GPU_VERTEXELEMENTFORMAT_UINT, .offset = 8, }, }, - .num_vertex_attributes = 4, + .num_vertex_attributes = 2, }, .primitive_type = SDL_GPU_PRIMITIVETYPE_TRIANGLELIST, @@ -611,48 +592,29 @@ bool renderer_init(SDL_Window *window_) { .vertex_buffer_descriptions = (SDL_GPUVertexBufferDescription[]){ { .slot = 0, - .pitch = 20, - .input_rate = SDL_GPU_VERTEXINPUTRATE_VERTEX, - - .instance_step_rate = 0, - }, - { - .slot = 1, .pitch = 12, .input_rate = SDL_GPU_VERTEXINPUTRATE_INSTANCE, .instance_step_rate = 0, }, }, - .num_vertex_buffers = 2, + .num_vertex_buffers = 1, .vertex_attributes = (SDL_GPUVertexAttribute[]){ - { - .location = 0, - .buffer_slot = 0, - .format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT3, - .offset = 0, - }, - { - .location = 1, - .buffer_slot = 0, - .format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT2, - .offset = 12, - }, { .location = 2, - .buffer_slot = 1, + .buffer_slot = 0, .format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT2, .offset = 0, }, { .location = 3, - .buffer_slot = 1, + .buffer_slot = 0, .format = SDL_GPU_VERTEXELEMENTFORMAT_UINT, .offset = 8, }, }, - .num_vertex_attributes = 4, + .num_vertex_attributes = 2, }, .primitive_type = SDL_GPU_PRIMITIVETYPE_TRIANGLELIST, diff --git a/src/renderer_wgpu.c b/src/renderer_wgpu.c index 4b4ef6d..cc63124 100644 --- a/src/renderer_wgpu.c +++ b/src/renderer_wgpu.c @@ -475,8 +475,8 @@ void renderer_frame_draw(R_Buffer vertex_buffer, R_Buffer index_buffer, R_Buffer wgpuRenderPassEncoderSetBindGroup(pass_encoder, 3, NULL, 0, NULL); } - if (vertex_buffer) wgpuRenderPassEncoderSetVertexBuffer(pass_encoder, 0, vertex_buffer->buffer, 0, WGPU_WHOLE_SIZE); - if (instance_buffer) wgpuRenderPassEncoderSetVertexBuffer(pass_encoder, 1, instance_buffer->buffer, 0, WGPU_WHOLE_SIZE); + if (vertex_buffer) wgpuRenderPassEncoderSetVertexBuffer(pass_encoder, 0, vertex_buffer->buffer, 0, WGPU_WHOLE_SIZE); + if (instance_buffer) wgpuRenderPassEncoderSetVertexBuffer(pass_encoder, vertex_buffer ? 1 : 0, instance_buffer->buffer, 0, WGPU_WHOLE_SIZE); if (index_buffer) { wgpuRenderPassEncoderSetIndexBuffer(pass_encoder, index_buffer->buffer, WGPUIndexFormat_Uint16, 0, WGPU_WHOLE_SIZE); @@ -683,14 +683,14 @@ bool renderer_init(SDL_Window *window_) { .chain = { .next = NULL, .sType = WGPUSType_ShaderSourceWGSL }, .code = { .data = shader_source, .length = SDL_arraysize(shader_source) }, }, - .label = { .data = "basic shader", .length = WGPU_STRLEN } + .label = { .data = "character shader", .length = WGPU_STRLEN } }); shaders[R_SHADER_CHARACTER] = wgpuDeviceCreateRenderPipeline(device, &(WGPURenderPipelineDescriptor){ - .label = { .data = "basic render_pipeline", .length = WGPU_STRLEN }, + .label = { .data = "character render_pipeline", .length = WGPU_STRLEN }, .layout = wgpuDeviceCreatePipelineLayout(device, &(WGPUPipelineLayoutDescriptor){ - .label = { .data = "basic pipeline_layout", .length = WGPU_STRLEN }, + .label = { .data = "character pipeline_layout", .length = WGPU_STRLEN }, .bindGroupLayoutCount = 4, .bindGroupLayouts = (WGPUBindGroupLayout[]){ wgpuDeviceCreateBindGroupLayout(device, &(WGPUBindGroupLayoutDescriptor){ @@ -726,25 +726,8 @@ bool renderer_init(SDL_Window *window_) { .entryPoint = { .data = "main_vertex", .length = WGPU_STRLEN }, .constantCount = 0, .constants = NULL, - .bufferCount = 2, + .bufferCount = 1, .buffers = (WGPUVertexBufferLayout[]){ - { - .stepMode = WGPUVertexStepMode_Vertex, - .arrayStride = 20, - .attributeCount = 2, - .attributes = (WGPUVertexAttribute[]){ - { - .format = WGPUVertexFormat_Float32x3, - .offset = 0, - .shaderLocation = 0, - }, - { - .format = WGPUVertexFormat_Float32x2, - .offset = 12, - .shaderLocation = 1, - }, - }, - }, { .stepMode = WGPUVertexStepMode_Instance, .arrayStride = 12, @@ -804,14 +787,14 @@ bool renderer_init(SDL_Window *window_) { .chain = { .next = NULL, .sType = WGPUSType_ShaderSourceWGSL }, .code = { .data = shader_source, .length = SDL_arraysize(shader_source) }, }, - .label = { .data = "basic shader", .length = WGPU_STRLEN } + .label = { .data = "character_shadow shader", .length = WGPU_STRLEN } }); shaders[R_SHADER_CHARACTER_SHADOW] = wgpuDeviceCreateRenderPipeline(device, &(WGPURenderPipelineDescriptor){ - .label = { .data = "basic render_pipeline", .length = WGPU_STRLEN }, + .label = { .data = "character_shadow render_pipeline", .length = WGPU_STRLEN }, .layout = wgpuDeviceCreatePipelineLayout(device, &(WGPUPipelineLayoutDescriptor){ - .label = { .data = "basic pipeline_layout", .length = WGPU_STRLEN }, + .label = { .data = "character_shadow pipeline_layout", .length = WGPU_STRLEN }, .bindGroupLayoutCount = 4, .bindGroupLayouts = (WGPUBindGroupLayout[]){ wgpuDeviceCreateBindGroupLayout(device, &(WGPUBindGroupLayoutDescriptor){ @@ -847,25 +830,8 @@ bool renderer_init(SDL_Window *window_) { .entryPoint = { .data = "main_vertex", .length = WGPU_STRLEN }, .constantCount = 0, .constants = NULL, - .bufferCount = 2, + .bufferCount = 1, .buffers = (WGPUVertexBufferLayout[]){ - { - .stepMode = WGPUVertexStepMode_Vertex, - .arrayStride = 20, - .attributeCount = 2, - .attributes = (WGPUVertexAttribute[]){ - { - .format = WGPUVertexFormat_Float32x3, - .offset = 0, - .shaderLocation = 0, - }, - { - .format = WGPUVertexFormat_Float32x2, - .offset = 12, - .shaderLocation = 1, - }, - }, - }, { .stepMode = WGPUVertexStepMode_Instance, .arrayStride = 12, diff --git a/src/shaders/spirv/character.spv b/src/shaders/spirv/character.spv index b4ea3cd78b6684a85b4d486c617f46da77814bb5..a2ab796d8a3cb04e71c9401e057e6edfa6dc7c84 100644 GIT binary patch literal 3448 zcmZ{l+iz7>5XKk1S)klRZW0L>O^9tys?=M=nkGsSsx6`*Bzib)ciW@qbf4_*mXi2@ zF(y8MqJIMKyd#33J~YuMpS(m3@sfB?eDW5e-*4}kc3bN@nXH*_eQVattTp>IH|@G9 zgk>Rw-T5SKU1$n-+sw+!&=$^X?jJZjP?}0dOFj2=%M7bSGgG#EjaZB(Nxf2?EYCzq z8qJ0Y*)_=)$v(-`k~Lv@Xwe)?GVWMX8Lvl^sq8t)jAX5Rv##KzHD}(5rB%NU&AIz> zBcA$yY}Ep98lUX_FV>dDRh?{1r=^o|QX9>jwkpO0+A}gdJvJ64<$5Jesgnp~EvKqVTgDMBl*{#~J{%FmI1#sP$@kH(m&04)wcRPf=3Q-*kYm5z3ipP-UtZ7|yYfj`%RI&#EOK~jYbE&P z{&q+hZts-N8^q@RIFk;*=AGvqklVa@))}l*>!MAai~h0k?>SIU&%tZ!IpB}F7WZSb z-{Yaqe%^X{BJLepWgUH^v^LG#C7a}r+_9+%cDvccuw6E}!2#bOdt-*@zF6NZJNKKf z-)ifcLZ{a8?eTQ!Uhs39Vc^cO9Iv{4yVf)w_C4eX2i&pUhJpLOPU#_>p5Mn?$Fh-u+arDPnfD1>y!QdySKPbTc*S^ojpun&%RUK%T0W|oT2iCUvJYye z_AQcax;Nf57~BEP+z}Y|6K4DRQ?l{JeNY?bqY~b^+sCCdymlj*b-EXS7sP{2ZTA&y>PN5RgLUdfZ#$p-CnTKBI{DWMHvZ^s=aV13 z%z#gP^rrjA-<$-0_o@%r#~K6dcUjysdsk}ikWhQKSDF2g)_FIZB;@y^Z0fkxu;1iu zgLKAU`o{%domu?<=JE0dID4Ihvu~Dg_IgRHu&-APVxeczi39x)t#b}M{5o%^ z=}YlA*Ln1=`=dvT{)o$Y^s4i^7x9SOdGxCD7RN_k&ZB>wN8c9DC2!}^zs{p?i#+n? z9_WQfB)luP`=wK_m+V`&UpgG{A-!hq^f3vzf0z2irGEz{yvaTZ{tjv$l7PP<4toz7 zh7UO0{b31j_e1%|K4KXCjyUfb=|$c#*x_5^6i4nS9XcE!J@rf9WLwarxwHvKB(;2`?1+z40x|tO+S%N-f%kXtWTw%m#~+0$3HWC zh2bBm4sd=o`&IM#xoo)L9TvkE((!qRg!Ky&zw0lhb0(aZ&Bt}=;PjE_@s)IPDCXg3 zel7gE1diX=H`2MUqsohW{#F78mocd5FKT{E!WzP$K1~w(>Wb!fB$qQg_syQGhP#hz phJiEO2X%)3u7q>0Nw|0VpDd literal 2832 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 GT>lLKa6%IR literal 2692 zcmZvc%WGU!9LG;GnK7xYtw>*1N@^4$4MR0)t+q|7F5)86sa6DC4AW#%Mlv(;_9m@6 zMJ%p_?0wYdLU85IXGN-l&w_tK5d~3~ZUjG{d(SCT=?UMQ-~0StcPhgZH-#`1LYNGH z^WSr87!LQvTg}a(7A|nlFFdhOKbtSrXAT~K4Y!1fSK+-CE6*_KwmQA$dOOS8=fh+0 zC&5l|JGcXE4P#-1`xGc_m$TNHZo8Mme*m5V+lZ~6Q%CpY-qsuG(Rz5W|H8b1H@vId# z#%VUY?e6JzX2I1k8s@myJMDAL)vW()dol0ydohOkO+~F#l0Dz(cY1lFm9@I)ul1vD zcGmF!J}I;A>uab6dqN-cwXA(FBvxbLb?%h^Iyv;SnE$ldha!J%JlE$x65d3XlbO0I zUA5mg%s0)XzSv*sXV}(mIInpo={)utkR$Ibt&#yMu!{+Ur5yh787&H(tuwex{sLZ&S{`Z(j%f z<@NUqQE#8qd$$qEJogowUFN(Un;Nol;MsxBddI;|bfetmw@~t9kvAvxTOx1IjAft3 zf$xmN?})T<Mgcs&^@y0PI^ET(baW9ma-z>MaxgYY!BcJpO@b*@J^^M4z-)^#80TV4QU1 zJ$vwej$1qZ{T=Zrv!DKmI1hbOJsZ&GFU;3HNd0^RT3cntyBK-(N8s(h--++b+kd~4 zLEi5q@z(E-8&iAhb*HUa-g@2X#2e3@PX5+YeB|8Po1Z&57|)&5Kh<{?+8q!>Xw3aD zaEN&tS6`1l|G+u7WBk`{JFq@^XRr%cU*h*bTi*$$qJ9GCBRs}`HSWz_(CW?OBr@lC z4^ZxToXPm+uRysudXnvaXl;#|Y=47Ru8;DR#|*SO;ZgTu%;O-md25qohoF_a+YRz? z{~iR&-F0{4A^eXQcR9mJX#3#qJ{;v6*y#I6lo?}|&N^dd($3dD{!3PeL7KxUWS$Ce z4o`AB;{)6u0{fNv{xr0Ek@(-CwUKw%zXR^c61?BS_fd9+{QL%fh%#%izkU-xMmZNg zr?0pU=*lN^3S4tQbMMT4TE*0H@`-%k2Yyu-#|OBr>JWS_qRZqww@DIXpOG{b;4tR{C?fd zi`;Jke-9>svGsWyC{Hooi8AG$6vIAi|1R(y?b5gR9<*;(Km$8-d>?45&RP1qqb%+9 EfA1#=&;S4c diff --git a/src/shaders/spirv/world.spv b/src/shaders/spirv/world.spv index b00713863484bac4437956bbeb26491385babadc..9837f0183754d6486c515c2999c277a5de2bfba7 100644 GIT binary patch literal 4740 zcmaKuX>XKO6vrPJTNXiZMMVf=A|O~dBqlBtREmmH_uYq~otDu~r%tDJi5jWFXk2l@ zmlF5{d;+5{eD4QP!Tp7ai6#o}zuzTI2i zb!s*{yDag`6IXR|)}0-K_iej#ThDlVuxI_1mm+4TWEEKvWf4}c*-)ceAI&Fgt#<9n z>}llZpeg8Fs25t4&CgDP?|};2p;mRcQ5$U|e-FI|y$LNQzBUxfu2N*Mo-Y0t!aFJQ zvF7-HW2c<3o0v?#|HkHKo6+^xTKSe%wNcA&sJ5#)C%tUF2kquhy=#zC(NtR$+f5zf z*3@WDjMv~{JDdG*t3H@Fhla*$?c=x|EAS`kgY8`>?CnRRI+iE+xP4dH@2b^@ceRVN z-v~BFt+cISPW$ml@~7wRiB_$^c7Wyic(pM$QX4Gn=4Fq<2X;;j4dLIYwp;ZluNfL? zR@>{=uUmgz-l;^n zoAuFlf0gpkAD@LDFQAKCoFdNu*|qB<9;-NmeJsT&Fz2H_IyTWRB6jSYmk!qP?qX`* z2D`J}ni#MngPV&(0~Nhh=lbUvyR&^@J4c!Wk6qqlpnPI-oSgHrgVXS8d!#zvGtg}8 ztdH7UZ9c~)dOJyfnyu8^E9`71uQslK=IzRkfE9VKATM8neezqFu}|^6kbk7v!nS+H zZ>f*3%x}&w^CC#OH_2-Yxl+upJ>E)`&2ZNR9d;aZzQyK3VW*GS;u2O#*x4n_xz_Hy z66Q>ct$?h_c|IR9Psl4vva_w;rCwRRtB-fVd9@yEi`g~4Yb*AFSxec*cg6aR>1>yC zD3@#S9qYVs9edxj<&aDNDY$Z+!5J;`WTV%h|@Dq-T`=XaE4&us^>X$QT ze&=Gw8iAWfOnEfPp??b5+VxleY?AGj^6n&?U-?z|EGYDEBsuhZk{{1M2d?A`djhTgmI zeYF<#&%&Q8$-CK4m1OV2_cii+7rw6{+hgCrh<||nLC9tN!|)?e=*|BX~KRX+F9&fzww{3_@YAU z{2rM1RLIV*pls$~Qy$iAUU9*!MyacN=@Lh;b`>W4xGR+{RuT@qV!F z1@FXGCw3S7?u6e1H@5HUeF@*rgk8`6{)CCUoSED4ckUj5#GM~&@ojww@_Wqj&*3{D zG2>{bkN%#u3hjVgWBB|24MF{o@sx)lXKpt>%DW(K#QS+==D_QaxNnqilKmcqH=zbJ z02$Bsc?=TYi;cdIC(Ia;bAr9I)G6vG;3`wGnqktYhrWA?!UG>sLrTeAl8BGlq8d z(AeV6n(=>wJe%awE_A=M51n≤44T-yhH+s0T8Jw)S>Gs{2p&>cckhzY;zlZj4W; zU7IsVto%}%xmn2Cibu{R?2Wk=QvV_RBPiyy0%l(AUPy7e*o*uAN9;N5#qC4*&SUR6 z%62D%iE9_}7P9xOWxGXS;@U;6i`hr5<};RdF+b)w(9RL6T literal 5252 zcmaKvTW^$A6ox;ktx}MKh>8a+pdwO7gmQ?Yh(SRGTf_rKlgYH5mXS`UPNzkUM$~9D zF)E1{UU*2nkwg+n^u{Bicqx%z;7`yyHO9o}`DQQtoDjFJthL^~_S)}WdwqLK*PK-s zWZ8LHmfes&p<*n~=47`dy*_ED=4CzEFX)}S_w6oCw?<0?8`t4x3$iX%o@F6XjyXuZ zQkyK#R-3Kr)7eq{W5{vjHsms7Vb+_SkNynFW5=46@p^T#g};mqze0bDEF!-#5XI`s zcaTqac44**JydO$?`c-*)$)!?t5Sy9Edvtk;Xmgcqoii0(j<8gE5*%GZ_G?r(Ge@} z@n&tb+!!01uC~tNo-oG`)ka$f{*9M^y)so!@Y(q8h(A!RjUQ;SV|R8H*c4njX5Br- zHm3E|s5R59=GbPia(TK^pPHzS=5ceg-RP0wnXxg}*DI}N?dh#!6OBr%f1rQhj&hr) zF^+P%Uab#To7TV@4Wegj)kEc}X5-1~NUPSEOgWtI&F_V(H=h}5)FxX)73eX4_U=kE zv&PNK@9zKNTD1v}m7k&W{ynSrS(}`iY2_K)ao%qmYp?F+mQRB1Yc*#^tjOqH`JsXG z+B)a>?-_ftQ((grjgf=vOC~DM%uci8-0VyTUTIBKrb{D@`fzR1;u;ky`?d>Tt|!rsIFIr6s9a+&eYsi#?^xeE zG1k5{))9U&)_!!Idqr;+_p&dG>-AkPKl9n6an2=V!X@6V#*Y_^; z?J<2hEXALT?n4~ zc8wf^^EPaU@pq!-q&ROq??xEg`ngx@umcfOBIZ79NBH;W-r;SRlVcCI`P_3k?EPlM z-0uOj+{N^Vk{|Pr;Jem+WB>iw?xzGco_zNWjGu^1zlgn(;)-kEIY-<_2{TS!AET|i zT=YLlzP$85O}@3&{}O#367%0AKju&1dv5bxP3G^DZGBE+>zn5Xv~gnI`A=x?#N6UB z^c`2S{xsS+*Z(ZY5R1C}irrbi-@u|)_DL@Z-N!S_$?sXroEM?pTTFjp@}0j8-|x!b z3f$cHJMo=%jq~=T@314{eTO67p770#cx!(Yk&E%x-ZwLRYk$1pTYKNk$YBOzD@2I{r!;1vco5$rVry=Q}Mta!PYPK+M@{*-^BNX%J(sw z`TxN4JCVm4^lk#|5q-af`wRY^`1d9McIJH>mLk^vIedG~w_9vGd-)z+gLoIdQ?6-vz$yAr#YcNM-^GwDb7E`J{fPKYh@4C4 zn-TFrPVU>gE@9#hj-2gfz327c1mfP6Tzuy?Aof?8^_$R}6J{RcT;qDrx&?9GaR)bG zy~X0(w_@9yQO~W|V!so+1nu~Xe>I5D&%G?W2rb72i2E%>yxT>Hce@zrMlMFYZ`b{a zHlM!hr-=0JxC^m9FS0`ao`l(3Lwuq3#=Qx*&-{kH>ml@BWDxOv_dI*h4X}3vT1s zMQ+wPxE;hUa+|~#^E(Z0Q~2VY+@1pKp6-fWHUZ@5o&KZs}_uOR?I=vCZ>0FU1xlehWSW zclciT7JQD5xBn{Q%^&-If$i^H@cJ6t-?{C)3n$RuA*YaSh;za3N9^yCe;R!adC#Cn z;r|o54_|DYH^O&&6}Fgp_JYktUyCp9@P2yG*Wrr?zx~*9evnz~^cc1=;*Q95J-)ew zBiCvi@mTvfwwO8iKd+~`#r>Ty{|(rlO>r0(b88B7bHJ_dd{(*cM&^D&mk@IpYi;Kz z-fPo*#0K7<@ZOZ;OzMa2;O2adTDhi#ZLE0gxdYoh{S9>fSM+a4yz}e8+}F65Q=awM z;yZ|o+ynUH)*;qz!uA}+xGnhN#znqcu{~=sZY#dHal!R=?BMEt<}%KEwtseF+dq#| zFZ**BzL@JAgH)jxdmiGP;!t@P{$BYv, - @location(1) uv_1 : vec2, @location(2) world_pos_0 : vec2, @location(3) sprite_selection_0 : u32, }; @@ -27,8 +25,53 @@ struct vertexInput_0 fn main_vertex( _S1 : vertexInput_0, @builtin(vertex_index) vertex_index_0 : u32) -> VertexShaderOutput_0 { var output_0 : VertexShaderOutput_0; - output_0.pos_0 = (((mat4x4(view_projection_matrix_0.data_0[i32(0)][i32(0)], view_projection_matrix_0.data_0[i32(1)][i32(0)], view_projection_matrix_0.data_0[i32(2)][i32(0)], view_projection_matrix_0.data_0[i32(3)][i32(0)], view_projection_matrix_0.data_0[i32(0)][i32(1)], view_projection_matrix_0.data_0[i32(1)][i32(1)], view_projection_matrix_0.data_0[i32(2)][i32(1)], view_projection_matrix_0.data_0[i32(3)][i32(1)], view_projection_matrix_0.data_0[i32(0)][i32(2)], view_projection_matrix_0.data_0[i32(1)][i32(2)], view_projection_matrix_0.data_0[i32(2)][i32(2)], view_projection_matrix_0.data_0[i32(3)][i32(2)], view_projection_matrix_0.data_0[i32(0)][i32(3)], view_projection_matrix_0.data_0[i32(1)][i32(3)], view_projection_matrix_0.data_0[i32(2)][i32(3)], view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(_S1.world_pos_0 + _S1.pos_1.xy, 0.0f, 1.0f)))); - output_0.uv_0 = (vec2(f32((u32(_S1.sprite_selection_0>>(u32(16)))&((((u32(1)<>(u32(0)))&((((u32(1)<(0.25f); + const _S2 : vec2 = vec2(0.0f, 0.0f); + var vertex_pos_0 : vec2; + var vertex_uv_0 : vec2; + switch(vertex_index_0) + { + case u32(0): + { + vertex_pos_0 = vec2(-0.5f, 0.5f); + vertex_uv_0 = _S2; + } + case u32(1): + { + const _S3 : vec2 = vec2(0.0f, 1.0f); + vertex_pos_0 = vec2(-0.5f, -0.5f); + vertex_uv_0 = _S3; + } + case u32(2): + { + const _S4 : vec2 = vec2(1.0f, 1.0f); + vertex_pos_0 = vec2(0.5f, -0.5f); + vertex_uv_0 = _S4; + } + case u32(3): + { + vertex_pos_0 = vec2(-0.5f, 0.5f); + vertex_uv_0 = _S2; + } + case u32(4): + { + const _S5 : vec2 = vec2(1.0f, 1.0f); + vertex_pos_0 = vec2(0.5f, -0.5f); + vertex_uv_0 = _S5; + } + case u32(5): + { + const _S6 : vec2 = vec2(1.0f, 0.0f); + vertex_pos_0 = vec2(0.5f, 0.5f); + vertex_uv_0 = _S6; + } + default : + { + vertex_pos_0 = _S2; + vertex_uv_0 = _S2; + } + } + output_0.pos_0 = (((mat4x4(view_projection_matrix_0.data_0[i32(0)][i32(0)], view_projection_matrix_0.data_0[i32(1)][i32(0)], view_projection_matrix_0.data_0[i32(2)][i32(0)], view_projection_matrix_0.data_0[i32(3)][i32(0)], view_projection_matrix_0.data_0[i32(0)][i32(1)], view_projection_matrix_0.data_0[i32(1)][i32(1)], view_projection_matrix_0.data_0[i32(2)][i32(1)], view_projection_matrix_0.data_0[i32(3)][i32(1)], view_projection_matrix_0.data_0[i32(0)][i32(2)], view_projection_matrix_0.data_0[i32(1)][i32(2)], view_projection_matrix_0.data_0[i32(2)][i32(2)], view_projection_matrix_0.data_0[i32(3)][i32(2)], view_projection_matrix_0.data_0[i32(0)][i32(3)], view_projection_matrix_0.data_0[i32(1)][i32(3)], view_projection_matrix_0.data_0[i32(2)][i32(3)], view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(_S1.world_pos_0 + vertex_pos_0, 0.0f, 1.0f)))); + output_0.uv_0 = (vec2(f32((u32(_S1.sprite_selection_0>>(u32(16)))&((((u32(1)<>(u32(0)))&((((u32(1)<(0.25f); return output_0; } @@ -41,15 +84,15 @@ fn GetDimensions_0( texture_texture_0 : texture_2d, texture_sampler_0 : sa fn pixel_art_sample_0( input_texture_texture_0 : texture_2d, input_texture_sampler_0 : sampler, input_uv_0 : vec2) -> vec4 { var dimensions_0 : vec2; - var _S2 : f32 = dimensions_0[i32(0)]; - var _S3 : f32 = dimensions_0[i32(1)]; - GetDimensions_0(input_texture_texture_0, input_texture_sampler_0, &(_S2), &(_S3)); - dimensions_0[i32(0)] = _S2; - dimensions_0[i32(1)] = _S3; - var _S4 : vec2 = input_uv_0 * dimensions_0.xy; - var _S5 : vec2 = (floor(_S4) + min(fract(_S4) / (fwidth((_S4))), vec2(1.0f, 1.0f)) - vec2(0.5f)) / dimensions_0.xy; + var _S7 : f32 = dimensions_0[i32(0)]; + var _S8 : f32 = dimensions_0[i32(1)]; + GetDimensions_0(input_texture_texture_0, input_texture_sampler_0, &(_S7), &(_S8)); + dimensions_0[i32(0)] = _S7; + dimensions_0[i32(1)] = _S8; + var _S9 : vec2 = input_uv_0 * dimensions_0.xy; + var _S10 : vec2 = (floor(_S9) + min(fract(_S9) / (fwidth((_S9))), vec2(1.0f, 1.0f)) - vec2(0.5f)) / dimensions_0.xy; ; - return (textureSample((input_texture_texture_0), (input_texture_sampler_0), (_S5))); + return (textureSample((input_texture_texture_0), (input_texture_sampler_0), (_S10))); } struct FragmentShaderOutput_0 @@ -59,15 +102,15 @@ struct FragmentShaderOutput_0 struct pixelInput_0 { - @location(0) uv_2 : vec2, + @location(0) uv_1 : vec2, }; @fragment -fn main_fragment( _S6 : pixelInput_0, @builtin(position) pos_2 : vec4) -> FragmentShaderOutput_0 +fn main_fragment( _S11 : pixelInput_0, @builtin(position) pos_1 : vec4) -> FragmentShaderOutput_0 { var output_1 : FragmentShaderOutput_0; - var _S7 : vec4 = pixel_art_sample_0(texture1_texture_0, texture1_sampler_0, _S6.uv_2); - output_1.color_0 = vec4(_S7.xyz * tint_0.xyz, _S7.w); + var _S12 : vec4 = pixel_art_sample_0(texture1_texture_0, texture1_sampler_0, _S11.uv_1); + output_1.color_0 = vec4(_S12.xyz * tint_0.xyz, _S12.w); return output_1; } diff --git a/src/shaders/wgsl/character_shadow.wgsl b/src/shaders/wgsl/character_shadow.wgsl index f21029e..f08b69d 100644 --- a/src/shaders/wgsl/character_shadow.wgsl +++ b/src/shaders/wgsl/character_shadow.wgsl @@ -17,33 +17,62 @@ struct VertexShaderOutput_0 struct vertexInput_0 { - @location(0) pos_1 : vec3, - @location(1) uv_1 : vec2, @location(2) world_pos_0 : vec2, }; -struct VertexShaderInput_0 -{ - vertex_index_0 : u32, - pos_2 : vec3, - uv_2 : vec2, - world_pos_1 : vec2, -}; - @vertex -fn main_vertex( _S1 : vertexInput_0, @builtin(vertex_index) vertex_index_1 : u32) -> VertexShaderOutput_0 +fn main_vertex( _S1 : vertexInput_0, @builtin(vertex_index) vertex_index_0 : u32) -> VertexShaderOutput_0 { - var _S2 : VertexShaderInput_0; - _S2.vertex_index_0 = vertex_index_1; - _S2.pos_2 = _S1.pos_1; - _S2.uv_2 = _S1.uv_1; - _S2.world_pos_1 = _S1.world_pos_0; - var _S3 : vec2 = _S2.pos_2.xy * vec2(0.5f); - _S2.pos_2.x = _S3.x; - _S2.pos_2.y = _S3.y; var output_0 : VertexShaderOutput_0; - output_0.pos_0 = (((mat4x4(view_projection_matrix_0.data_0[i32(0)][i32(0)], view_projection_matrix_0.data_0[i32(1)][i32(0)], view_projection_matrix_0.data_0[i32(2)][i32(0)], view_projection_matrix_0.data_0[i32(3)][i32(0)], view_projection_matrix_0.data_0[i32(0)][i32(1)], view_projection_matrix_0.data_0[i32(1)][i32(1)], view_projection_matrix_0.data_0[i32(2)][i32(1)], view_projection_matrix_0.data_0[i32(3)][i32(1)], view_projection_matrix_0.data_0[i32(0)][i32(2)], view_projection_matrix_0.data_0[i32(1)][i32(2)], view_projection_matrix_0.data_0[i32(2)][i32(2)], view_projection_matrix_0.data_0[i32(3)][i32(2)], view_projection_matrix_0.data_0[i32(0)][i32(3)], view_projection_matrix_0.data_0[i32(1)][i32(3)], view_projection_matrix_0.data_0[i32(2)][i32(3)], view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(_S2.world_pos_1 + _S2.pos_2.xy + vec2(0.0f, -0.34999999403953552f), 0.0f, 1.0f)))); - output_0.uv_0 = _S2.uv_2; + const _S2 : vec2 = vec2(0.0f, 0.0f); + var vertex_uv_0 : vec2; + var vertex_pos_0 : vec2; + switch(vertex_index_0) + { + case u32(0): + { + const _S3 : vec2 = vec2(-0.5f, 0.5f); + vertex_uv_0 = _S2; + vertex_pos_0 = _S3; + } + case u32(1): + { + const _S4 : vec2 = vec2(-0.5f, -0.5f); + vertex_uv_0 = vec2(0.0f, 1.0f); + vertex_pos_0 = _S4; + } + case u32(2): + { + const _S5 : vec2 = vec2(0.5f, -0.5f); + vertex_uv_0 = vec2(1.0f, 1.0f); + vertex_pos_0 = _S5; + } + case u32(3): + { + const _S6 : vec2 = vec2(-0.5f, 0.5f); + vertex_uv_0 = _S2; + vertex_pos_0 = _S6; + } + case u32(4): + { + const _S7 : vec2 = vec2(0.5f, -0.5f); + vertex_uv_0 = vec2(1.0f, 1.0f); + vertex_pos_0 = _S7; + } + case u32(5): + { + const _S8 : vec2 = vec2(0.5f, 0.5f); + vertex_uv_0 = vec2(1.0f, 0.0f); + vertex_pos_0 = _S8; + } + default : + { + vertex_uv_0 = _S2; + vertex_pos_0 = _S2; + } + } + output_0.pos_0 = (((mat4x4(view_projection_matrix_0.data_0[i32(0)][i32(0)], view_projection_matrix_0.data_0[i32(1)][i32(0)], view_projection_matrix_0.data_0[i32(2)][i32(0)], view_projection_matrix_0.data_0[i32(3)][i32(0)], view_projection_matrix_0.data_0[i32(0)][i32(1)], view_projection_matrix_0.data_0[i32(1)][i32(1)], view_projection_matrix_0.data_0[i32(2)][i32(1)], view_projection_matrix_0.data_0[i32(3)][i32(1)], view_projection_matrix_0.data_0[i32(0)][i32(2)], view_projection_matrix_0.data_0[i32(1)][i32(2)], view_projection_matrix_0.data_0[i32(2)][i32(2)], view_projection_matrix_0.data_0[i32(3)][i32(2)], view_projection_matrix_0.data_0[i32(0)][i32(3)], view_projection_matrix_0.data_0[i32(1)][i32(3)], view_projection_matrix_0.data_0[i32(2)][i32(3)], view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(_S1.world_pos_0 + vertex_pos_0 * vec2(0.5f) + vec2(0.0f, -0.34999999403953552f), 0.0f, 1.0f)))); + output_0.uv_0 = vertex_uv_0; return output_0; } @@ -56,15 +85,15 @@ fn GetDimensions_0( texture_texture_0 : texture_2d, texture_sampler_0 : sa fn pixel_art_sample_0( input_texture_texture_0 : texture_2d, input_texture_sampler_0 : sampler, input_uv_0 : vec2) -> vec4 { var dimensions_0 : vec2; - var _S4 : f32 = dimensions_0[i32(0)]; - var _S5 : f32 = dimensions_0[i32(1)]; - GetDimensions_0(input_texture_texture_0, input_texture_sampler_0, &(_S4), &(_S5)); - dimensions_0[i32(0)] = _S4; - dimensions_0[i32(1)] = _S5; - var _S6 : vec2 = input_uv_0 * dimensions_0.xy; - var _S7 : vec2 = (floor(_S6) + min(fract(_S6) / (fwidth((_S6))), vec2(1.0f, 1.0f)) - vec2(0.5f)) / dimensions_0.xy; + var _S9 : f32 = dimensions_0[i32(0)]; + var _S10 : f32 = dimensions_0[i32(1)]; + GetDimensions_0(input_texture_texture_0, input_texture_sampler_0, &(_S9), &(_S10)); + dimensions_0[i32(0)] = _S9; + dimensions_0[i32(1)] = _S10; + var _S11 : vec2 = input_uv_0 * dimensions_0.xy; + var _S12 : vec2 = (floor(_S11) + min(fract(_S11) / (fwidth((_S11))), vec2(1.0f, 1.0f)) - vec2(0.5f)) / dimensions_0.xy; ; - return (textureSample((input_texture_texture_0), (input_texture_sampler_0), (_S7))); + return (textureSample((input_texture_texture_0), (input_texture_sampler_0), (_S12))); } struct FragmentShaderOutput_0 @@ -74,15 +103,15 @@ struct FragmentShaderOutput_0 struct pixelInput_0 { - @location(0) uv_3 : vec2, + @location(0) uv_1 : vec2, }; @fragment -fn main_fragment( _S8 : pixelInput_0, @builtin(position) pos_3 : vec4) -> FragmentShaderOutput_0 +fn main_fragment( _S13 : pixelInput_0, @builtin(position) pos_1 : vec4) -> FragmentShaderOutput_0 { var output_1 : FragmentShaderOutput_0; - var _S9 : vec4 = pixel_art_sample_0(texture1_texture_0, texture1_sampler_0, _S8.uv_3); - output_1.color_0 = vec4(_S9.xyz * tint_0.xyz, _S9.w); + var _S14 : vec4 = pixel_art_sample_0(texture1_texture_0, texture1_sampler_0, _S13.uv_1); + output_1.color_0 = vec4(_S14.xyz * tint_0.xyz, _S14.w); return output_1; } diff --git a/src/shaders/wgsl/world.wgsl b/src/shaders/wgsl/world.wgsl index 0287dfb..b905419 100644 --- a/src/shaders/wgsl/world.wgsl +++ b/src/shaders/wgsl/world.wgsl @@ -34,49 +34,59 @@ struct VertexShaderOutput_0 @vertex fn main_vertex(@builtin(vertex_index) vertex_index_0 : u32, @builtin(instance_index) instance_index_0 : u32) -> VertexShaderOutput_0 { - var _S1 : u32 = instance_index_0 % per_frame_0.map_width_0; - var _S2 : u32 = instance_index_0 / per_frame_0.map_width_0; - var _S3 : vec2 = vec2(_S1, _S2); var output_0 : VertexShaderOutput_0; - var _S4 : vec3 = vec3(vec3(_S3, u32(0))); - output_0.tile_0 = (textureLoad((map_texture_0), ((_S4)).xy, ((_S4)).z).x); + const _S1 : vec2 = vec2(0.0f, 0.0f); + var vertex_pos_0 : vec2; + var vertex_uv_0 : vec2; switch(vertex_index_0) { case u32(0): { - output_0.pos_0 = (((mat4x4(view_projection_matrix_0.data_0[i32(0)][i32(0)], view_projection_matrix_0.data_0[i32(1)][i32(0)], view_projection_matrix_0.data_0[i32(2)][i32(0)], view_projection_matrix_0.data_0[i32(3)][i32(0)], view_projection_matrix_0.data_0[i32(0)][i32(1)], view_projection_matrix_0.data_0[i32(1)][i32(1)], view_projection_matrix_0.data_0[i32(2)][i32(1)], view_projection_matrix_0.data_0[i32(3)][i32(1)], view_projection_matrix_0.data_0[i32(0)][i32(2)], view_projection_matrix_0.data_0[i32(1)][i32(2)], view_projection_matrix_0.data_0[i32(2)][i32(2)], view_projection_matrix_0.data_0[i32(3)][i32(2)], view_projection_matrix_0.data_0[i32(0)][i32(3)], view_projection_matrix_0.data_0[i32(1)][i32(3)], view_projection_matrix_0.data_0[i32(2)][i32(3)], view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - vec2(0.5f, 0.5f) + vec2(-0.5f, 0.5f), 0.0f, 1.0f)))); - output_0.uv_0 = vec2(0.0f, 0.0f); + vertex_pos_0 = vec2(-1.0f, 0.0f); + vertex_uv_0 = _S1; } case u32(1): { - output_0.pos_0 = (((mat4x4(view_projection_matrix_0.data_0[i32(0)][i32(0)], view_projection_matrix_0.data_0[i32(1)][i32(0)], view_projection_matrix_0.data_0[i32(2)][i32(0)], view_projection_matrix_0.data_0[i32(3)][i32(0)], view_projection_matrix_0.data_0[i32(0)][i32(1)], view_projection_matrix_0.data_0[i32(1)][i32(1)], view_projection_matrix_0.data_0[i32(2)][i32(1)], view_projection_matrix_0.data_0[i32(3)][i32(1)], view_projection_matrix_0.data_0[i32(0)][i32(2)], view_projection_matrix_0.data_0[i32(1)][i32(2)], view_projection_matrix_0.data_0[i32(2)][i32(2)], view_projection_matrix_0.data_0[i32(3)][i32(2)], view_projection_matrix_0.data_0[i32(0)][i32(3)], view_projection_matrix_0.data_0[i32(1)][i32(3)], view_projection_matrix_0.data_0[i32(2)][i32(3)], view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - vec2(0.5f, 0.5f) + vec2(-0.5f, -0.5f), 0.0f, 1.0f)))); - output_0.uv_0 = vec2(0.0f, 1.0f); + const _S2 : vec2 = vec2(0.0f, 1.0f); + vertex_pos_0 = vec2(-1.0f, -1.0f); + vertex_uv_0 = _S2; } case u32(2): { - output_0.pos_0 = (((mat4x4(view_projection_matrix_0.data_0[i32(0)][i32(0)], view_projection_matrix_0.data_0[i32(1)][i32(0)], view_projection_matrix_0.data_0[i32(2)][i32(0)], view_projection_matrix_0.data_0[i32(3)][i32(0)], view_projection_matrix_0.data_0[i32(0)][i32(1)], view_projection_matrix_0.data_0[i32(1)][i32(1)], view_projection_matrix_0.data_0[i32(2)][i32(1)], view_projection_matrix_0.data_0[i32(3)][i32(1)], view_projection_matrix_0.data_0[i32(0)][i32(2)], view_projection_matrix_0.data_0[i32(1)][i32(2)], view_projection_matrix_0.data_0[i32(2)][i32(2)], view_projection_matrix_0.data_0[i32(3)][i32(2)], view_projection_matrix_0.data_0[i32(0)][i32(3)], view_projection_matrix_0.data_0[i32(1)][i32(3)], view_projection_matrix_0.data_0[i32(2)][i32(3)], view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - vec2(0.5f, 0.5f) + vec2(0.5f, -0.5f), 0.0f, 1.0f)))); - output_0.uv_0 = vec2(1.0f, 1.0f); + const _S3 : vec2 = vec2(1.0f, 1.0f); + vertex_pos_0 = vec2(0.0f, -1.0f); + vertex_uv_0 = _S3; } case u32(3): { - output_0.pos_0 = (((mat4x4(view_projection_matrix_0.data_0[i32(0)][i32(0)], view_projection_matrix_0.data_0[i32(1)][i32(0)], view_projection_matrix_0.data_0[i32(2)][i32(0)], view_projection_matrix_0.data_0[i32(3)][i32(0)], view_projection_matrix_0.data_0[i32(0)][i32(1)], view_projection_matrix_0.data_0[i32(1)][i32(1)], view_projection_matrix_0.data_0[i32(2)][i32(1)], view_projection_matrix_0.data_0[i32(3)][i32(1)], view_projection_matrix_0.data_0[i32(0)][i32(2)], view_projection_matrix_0.data_0[i32(1)][i32(2)], view_projection_matrix_0.data_0[i32(2)][i32(2)], view_projection_matrix_0.data_0[i32(3)][i32(2)], view_projection_matrix_0.data_0[i32(0)][i32(3)], view_projection_matrix_0.data_0[i32(1)][i32(3)], view_projection_matrix_0.data_0[i32(2)][i32(3)], view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - vec2(0.5f, 0.5f) + vec2(-0.5f, 0.5f), 0.0f, 1.0f)))); - output_0.uv_0 = vec2(0.0f, 0.0f); + vertex_pos_0 = vec2(-1.0f, 0.0f); + vertex_uv_0 = _S1; } case u32(4): { - output_0.pos_0 = (((mat4x4(view_projection_matrix_0.data_0[i32(0)][i32(0)], view_projection_matrix_0.data_0[i32(1)][i32(0)], view_projection_matrix_0.data_0[i32(2)][i32(0)], view_projection_matrix_0.data_0[i32(3)][i32(0)], view_projection_matrix_0.data_0[i32(0)][i32(1)], view_projection_matrix_0.data_0[i32(1)][i32(1)], view_projection_matrix_0.data_0[i32(2)][i32(1)], view_projection_matrix_0.data_0[i32(3)][i32(1)], view_projection_matrix_0.data_0[i32(0)][i32(2)], view_projection_matrix_0.data_0[i32(1)][i32(2)], view_projection_matrix_0.data_0[i32(2)][i32(2)], view_projection_matrix_0.data_0[i32(3)][i32(2)], view_projection_matrix_0.data_0[i32(0)][i32(3)], view_projection_matrix_0.data_0[i32(1)][i32(3)], view_projection_matrix_0.data_0[i32(2)][i32(3)], view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - vec2(0.5f, 0.5f) + vec2(0.5f, -0.5f), 0.0f, 1.0f)))); - output_0.uv_0 = vec2(1.0f, 1.0f); + const _S4 : vec2 = vec2(1.0f, 1.0f); + vertex_pos_0 = vec2(0.0f, -1.0f); + vertex_uv_0 = _S4; } case u32(5): { - const _S5 : vec2 = vec2(0.5f, 0.5f); - output_0.pos_0 = (((mat4x4(view_projection_matrix_0.data_0[i32(0)][i32(0)], view_projection_matrix_0.data_0[i32(1)][i32(0)], view_projection_matrix_0.data_0[i32(2)][i32(0)], view_projection_matrix_0.data_0[i32(3)][i32(0)], view_projection_matrix_0.data_0[i32(0)][i32(1)], view_projection_matrix_0.data_0[i32(1)][i32(1)], view_projection_matrix_0.data_0[i32(2)][i32(1)], view_projection_matrix_0.data_0[i32(3)][i32(1)], view_projection_matrix_0.data_0[i32(0)][i32(2)], view_projection_matrix_0.data_0[i32(1)][i32(2)], view_projection_matrix_0.data_0[i32(2)][i32(2)], view_projection_matrix_0.data_0[i32(3)][i32(2)], view_projection_matrix_0.data_0[i32(0)][i32(3)], view_projection_matrix_0.data_0[i32(1)][i32(3)], view_projection_matrix_0.data_0[i32(2)][i32(3)], view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - _S5 + _S5, 0.0f, 1.0f)))); - output_0.uv_0 = vec2(1.0f, 0.0f); + const _S5 : vec2 = vec2(1.0f, 0.0f); + vertex_pos_0 = _S1; + vertex_uv_0 = _S5; } default : { + vertex_pos_0 = _S1; + vertex_uv_0 = _S1; } } + var _S6 : u32 = instance_index_0 % per_frame_0.map_width_0; + var _S7 : u32 = instance_index_0 / per_frame_0.map_width_0; + var _S8 : vec2 = vec2(_S6, _S7); + var _S9 : vec3 = vec3(vec3(_S8, u32(0))); + output_0.tile_0 = (textureLoad((map_texture_0), ((_S9)).xy, ((_S9)).z).x); + output_0.pos_0 = (((mat4x4(view_projection_matrix_0.data_0[i32(0)][i32(0)], view_projection_matrix_0.data_0[i32(1)][i32(0)], view_projection_matrix_0.data_0[i32(2)][i32(0)], view_projection_matrix_0.data_0[i32(3)][i32(0)], view_projection_matrix_0.data_0[i32(0)][i32(1)], view_projection_matrix_0.data_0[i32(1)][i32(1)], view_projection_matrix_0.data_0[i32(2)][i32(1)], view_projection_matrix_0.data_0[i32(3)][i32(1)], view_projection_matrix_0.data_0[i32(0)][i32(2)], view_projection_matrix_0.data_0[i32(1)][i32(2)], view_projection_matrix_0.data_0[i32(2)][i32(2)], view_projection_matrix_0.data_0[i32(3)][i32(2)], view_projection_matrix_0.data_0[i32(0)][i32(3)], view_projection_matrix_0.data_0[i32(1)][i32(3)], view_projection_matrix_0.data_0[i32(2)][i32(3)], view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S8) + vertex_pos_0, 0.0f, 1.0f)))); + output_0.uv_0 = vertex_uv_0; return output_0; } @@ -88,16 +98,16 @@ fn CombinedTextureSampler_Sample_0( this_texture_0 : texture_2d, this_samp fn pixel_art_sample_0( input_texture_texture_0 : texture_2d, input_texture_sampler_0 : sampler, input_uv_0 : vec2, tile_uv_0 : vec4) -> vec4 { var dimensions_0 : vec2; - var _S6 : f32 = dimensions_0[i32(0)]; - var _S7 : f32 = dimensions_0[i32(1)]; - {var dim = textureDimensions((input_texture_texture_0));((_S6)) = f32(dim.x);((_S7)) = f32(dim.y);}; - dimensions_0[i32(0)] = _S6; - dimensions_0[i32(1)] = _S7; - var _S8 : vec2 = tile_uv_0.xy; - var _S9 : vec2 = tile_uv_0.zw; - var _S10 : vec2 = mix(_S8, _S9, input_uv_0); - var _S11 : vec2 = vec2(0.5f); - return CombinedTextureSampler_Sample_0(input_texture_texture_0, input_texture_sampler_0, clamp((floor(_S10) + saturate(fract(_S10) / (fwidth((_S10)))) - _S11) / dimensions_0, (_S8 + _S11) / dimensions_0, (_S9 - _S11) / dimensions_0)); + var _S10 : f32 = dimensions_0[i32(0)]; + var _S11 : f32 = dimensions_0[i32(1)]; + {var dim = textureDimensions((input_texture_texture_0));((_S10)) = f32(dim.x);((_S11)) = f32(dim.y);}; + dimensions_0[i32(0)] = _S10; + dimensions_0[i32(1)] = _S11; + var _S12 : vec2 = tile_uv_0.xy; + var _S13 : vec2 = tile_uv_0.zw; + var _S14 : vec2 = mix(_S12, _S13, input_uv_0); + var _S15 : vec2 = vec2(0.5f); + return CombinedTextureSampler_Sample_0(input_texture_texture_0, input_texture_sampler_0, clamp((floor(_S14) + saturate(fract(_S14) / (fwidth((_S14)))) - _S15) / dimensions_0, (_S12 + _S15) / dimensions_0, (_S13 - _S15) / dimensions_0)); } struct FragmentShaderOutput_0 @@ -112,11 +122,11 @@ struct pixelInput_0 }; @fragment -fn main_fragment( _S12 : pixelInput_0, @builtin(position) pos_1 : vec4) -> FragmentShaderOutput_0 +fn main_fragment( _S16 : pixelInput_0, @builtin(position) pos_1 : vec4) -> FragmentShaderOutput_0 { var output_1 : FragmentShaderOutput_0; - var _S13 : vec4 = pixel_art_sample_0(block2_tile_atlas_texture_0, block2_tile_atlas_sampler_0, _S12.uv_1, block2_tile_uvs_0[_S12.tile_1]); - output_1.color_0 = vec4(_S13.xyz * block3_tint_0.xyz, _S13.w); + var _S17 : vec4 = pixel_art_sample_0(block2_tile_atlas_texture_0, block2_tile_atlas_sampler_0, _S16.uv_1, block2_tile_uvs_0[_S16.tile_1]); + output_1.color_0 = vec4(_S17.xyz * block3_tint_0.xyz, _S17.w); return output_1; }