From 9dee07a31cf92b61e17593d5c687b1cf033a1b5d Mon Sep 17 00:00:00 2001 From: Flopgop <76978462+Flopgop@users.noreply.github.com> Date: Fri, 24 Jul 2026 22:51:20 -0700 Subject: [PATCH 1/7] Proper wide/slim skin handling with left and right hands, and template skin fetching from api. --- app/src/main/assets/meshes/controller.glb | Bin 1856 -> 0 bytes .../main/assets/meshes/left_controller.glb | Bin 0 -> 5016 bytes .../main/assets/meshes/right_controller.glb | Bin 0 -> 4816 bytes .../assets/meshes/slim_left_controller.glb | Bin 0 -> 5060 bytes .../assets/meshes/slim_right_controller.glb | Bin 0 -> 5060 bytes .../java/com/qcxr/questcraft/JniBridge.java | 1 + .../com/qcxr/questcraft/MainActivity.java | 4 + .../qcxr/questcraft/MojangSkinFetcher.java | 166 ++++++++++++++++++ app/src/main/rust/cargo.toml | 1 + app/src/main/rust/src/app.rs | 57 +++++- app/src/main/rust/src/jni_state.rs | 11 +- app/src/main/rust/src/lib.rs | 22 ++- app/src/main/rust/src/scene/gltf_model.rs | 84 ++++++++- app/src/main/rust/src/scene/scene.rs | 92 ++++++++-- blender_assets/controller.blend | Bin 101392 -> 0 bytes blender_assets/default_skin.png | Bin 0 -> 853 bytes blender_assets/left_controller.blend | Bin 0 -> 114185 bytes blender_assets/right_controller.blend | Bin 0 -> 115351 bytes blender_assets/slim_left_controller.blend | Bin 0 -> 110777 bytes blender_assets/slim_right_controller.blend | Bin 0 -> 114468 bytes blender_assets/slim_skin.png | Bin 0 -> 898 bytes 21 files changed, 407 insertions(+), 31 deletions(-) delete mode 100644 app/src/main/assets/meshes/controller.glb create mode 100644 app/src/main/assets/meshes/left_controller.glb create mode 100644 app/src/main/assets/meshes/right_controller.glb create mode 100644 app/src/main/assets/meshes/slim_left_controller.glb create mode 100644 app/src/main/assets/meshes/slim_right_controller.glb create mode 100644 app/src/main/java/com/qcxr/questcraft/MojangSkinFetcher.java delete mode 100644 blender_assets/controller.blend create mode 100644 blender_assets/default_skin.png create mode 100644 blender_assets/left_controller.blend create mode 100644 blender_assets/right_controller.blend create mode 100644 blender_assets/slim_left_controller.blend create mode 100644 blender_assets/slim_right_controller.blend create mode 100644 blender_assets/slim_skin.png diff --git a/app/src/main/assets/meshes/controller.glb b/app/src/main/assets/meshes/controller.glb deleted file mode 100644 index f7547a0e4414ef6cb21fa6f65f9b3df09af5ce4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1856 zcmb7DUr*FP5FY_SMO0MOH=BK~$F|pA+j}W+Vm!qw;Vy)P5YjvLjwW17+8#x|04&V_{G9~&*7O=f;wK49Np(niEM&2t zMlq?9@B48SMv2lx7iHyug?lVk>WiLoWR_@2*N94vSeyh=h+w@$$%#sm4hA4qDz$`E zw}&M3`)DIgai@|n+GG5J?wssgora{(l6~PS@wGvlVU9RT{Zu5`rs^kJvZ$reimlrf z+c7OuSE+i_h=G%ie}HMXX{l_P2+?%8i?lqMU~x&0rz=s)%Q}pMevk%765yw49JB{1 zKMu*d*Q~edUPDlAcpE>K*GN@UNo#eh=6M^RcPXjr*oq+B3p(7Td?GUX9Xusbob{wV z=yqAW8L*!sPABRgMj;E+*6|^dHZ{GXl1?-T@l|v~C4K)FmZD)9yaRk0;O9;*8woImcphtd!RZ@AHrDw04Se*PU%EC|#7?z9{XB((XySdx_8d zIG+1?m-x)i@rpYEk6{)ja6N%(cnS-+FTiVf3-4hb_jz~$&*3FZ;*P%z%)lF%!+j1O O!8>>cQ@BsTEBFV9NVoX_ diff --git a/app/src/main/assets/meshes/left_controller.glb b/app/src/main/assets/meshes/left_controller.glb new file mode 100644 index 0000000000000000000000000000000000000000..2036a83447f71b7ed1e38b2fa3f0b40ee3f01971 GIT binary patch literal 5016 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 literal 0 HcmV?d00001 diff --git a/app/src/main/assets/meshes/right_controller.glb b/app/src/main/assets/meshes/right_controller.glb new file mode 100644 index 0000000000000000000000000000000000000000..f4f860c959ee5503d74feaa72995c4c0bdb0b5c5 GIT binary patch literal 4816 zcmeHKdr(x@89zJ)5)=)P3L4jo;3Kem_uhR^;_@zwxVyrti7#B1%d*WrnBBX|!&QW+ z7+ZxzW|A<8h$MA1XcJ9s94eaFiH<}qj*U&*F|``CYMOD3nNSn@o%>jMiJF=G*E@61 zch2|yzQ_5#@1C=3cUtm85khAtArv2tP+^J5SVvfWK87W9b%dR9GhQp}@e(>>UZvOL z_V^@rP?2Oi8FxA3l^A3u$ttCklu~jcomjnfSC1K-9D%2 zjs)WX(5PuSrO?o7jao^oRMhf7x)`k-Ho))CQ|L{=QFI;>2%nNJ$`$ooAH6wI-<<#V{$xBkJrLfvwknwt|J`KJ=IX#Ksr>J*U7iq zxJH9!@rvp}o>UpYIsR$!{j}KRj}sfD9Cs_%$iWWJ@s}}TZoCecgLSMD09KauI?A9y zxCEI^B?gPZWaN6?XeyqcRYd5Zkt}&H%6QWP$P@k#?`jmrD*fPr(lS{ zLPE;?6%~wkk%L)H=pZ1M!^K!?s&E@}AX$~$4m%R|Sk6>f{Z6*j_maa+;5e){NQ=+o z?4GyQHj;VA6O3XQmwlq%uN=3X%90>j*qz?}sAfcMLX zv?wo!hSLo?dr;I+uZMXWOPzWgb!von=!lWtIVQJH8n!HWFUiR&$|@dV07^g7z|WE> z&gj@B87oohhX;CJ9TEj)yI-ck4Z<~QSq;k+F>X5x7Y(J+02UagiVE)jgXUqaUOT=D zX@yn=pP*RshwF029#vbeh4K&ftW@KIJ)&>*FlDt0_AywQ9wTs#61rrtYmI{YX!)Ey ze4lca_Ax>okz%=41E1jFV8_bxh&)jg-uzH?D7bLq@YRMxCg0)2cd<^ZrXV%&aR(XT z{(grD-7&Z&6e^GhB$9UcZIo>=!Y?J%BfR>D%&}a=JZRoC$i{=_q75t`Z7%XK9cwPi z$D%z#Jfa=E9zGY>n2t6FHh$`{4AY*WlwS!v5hGFoI|MUKU$i$WW-L3yWMX_n?1-3Q zbO@%0Ux{&yYDdJ3u+xwz(LcGVeeT-pr5tTYB=z_DcEDN|T=Q~0$8Si?6!_+#JUpWw z@Fs4(_PRbuF(2E%Q$4`h#}w=Hcp1mX{&=~G<6}9GGYd3Rh{q)0^g%q1GZaOjCr~K7 zQ795cqXZZe&?FR(o<K5Wl&|k_U8PU|^5;#WtIv`9=M<6?4~@Xjjdn^>Y&F z855synI}uGy;jOKxvlH##AJg5fR;%@TePLnY!i5V_Z}0Y% zbAOdduFh5(Qsc6x#>|>E3$0s+Dk~MKlfr6i57ewU)c8{I^P9iID{=WmY~e9 zE>s{Cy48@IWhscg^_LA>>BT7LpJ&vw-|6iQ49uLf_zwN&Oa95!hLijL@I}f8*G_!i z7;?d3IgMtHw>{B5KRMh#D=hPqm64Q8TCivK(bRB7SN2EOB3sS2@x9B+8v8nT&H1RR zv3>KMsmu0;oiwH{%*$S~vqiOS@wT%wzL?(mR%_?$#}B4e?mbX@`^QbwrtCPK!s&?92CMRhPk!mi3{v;@(%rXySf@9PM!H9`|*|J zgS$S5#BDE-k{$K+p||>*5|ZN0k`4Z2r)^7a9!-hAmep`& zAhaOl`kte=*G-S@=qNk3ji{yW*04B8YK;E&qA?3E38{{Q<4pSk$_#dNeeu<;|F z+re`j>kNB>7;Fa~5zDXmQREG$qhiLgGfXD>9%4tt45LFZJ;UM>u%lu|*unS5#+*1k zzMn9~_r==l6X2Bv*SuWM@$vn^ X#PP8l;~NsqK|CLiNxvpnTLvqM#i;j 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 H=x6^2s5GDU literal 0 HcmV?d00001 diff --git a/app/src/main/assets/meshes/slim_right_controller.glb b/app/src/main/assets/meshes/slim_right_controller.glb new file mode 100644 index 0000000000000000000000000000000000000000..7a7a795a6ee7711086969c54aeba802ba677c18c GIT binary patch literal 5060 zcmcgv2~9An}d_rxWpLc|)5r+RE6*u;j4id9>+lm>g^vC-21zGcJ#!6YYr=e+yh|G(eA z-2eXX{xij9{Ul$6P+b^8n}ZOVoTJMuCkze;<0RDOL@{G!>;|XJPN<0~M!U^wbBKyT zMKsaOSPL1uNE@pYEs%>zF(o0Qi3N<^VX|2POo>UNBARd%fB`~H@-qjao>fj*4Hl3Q zIqX_AVYL-9c!7+T%&D03oG&LVjKjz(^BP(!L<4T@HmAYK`k56&ij|~NLMmvAR?sTB zQcgva(OpStv5Znlm6VJmNm@xsDJF)b!JVVPV1{t8C8<)5RV5TlNI=U0;Itd84zu8p z1oHr)l~M^Mqoqn(DVHh~)SQZFAzle=f!m?Z<@{yiRgnrVR*B3rBjqv$1oiU3Wh#}5 zmXj))meMqvaf<=sG#Sj?@fggdMneW13Y^iz^pwnG$ata6m2YNpOodD#p?2C`jAxG- zysnreaRrp-+cOxa!E81aWZPWDMl0h0tK~$#!NDZi%r?88S>$xt!FD-ef(lv$=UWjC zC(Y?hG8C}I1_fgm)IBn>yaH$Wr^WZvVw3!s*dXP&V%cK$RC$sspAm9nH(5+h(*hn~ za60X#d?*n%L0P&StzN6kWa~Xsmz|NAPN<=j^eMSXI$d^h9!aPvhz62oD!?jI@W$sJ z=a4NxzV3LR6yEcz`IJQyf=~I2J{28(Dm(g=fKS-6lRHqZb{qyvsTpdX{o-vddjT9Y zoNqbN^#Z7yEQVq}A^EPNBE~+=#4IG#5Rk=WVf1CCxC~iPY^k*vcEs<|VK!Ov93>_z zfrBsKiqj5^iHJCs9b@2rsBrxdo#d(TNqOi#@2 zWB|^+vw>eEQLNGKkEFXqK@s*8=yUbXiK4qw?>13z?$6J;V}-G0o?qr<(iv;96IvBT zgLN#>6&0}^6spf@uovTIDwU}e@Bs@o)3YvX>{YcTDyW~1p5;n>;;-mi>7}exz&<)E zOS=i2R(Wljma(5am$RPtDN)LPR+>o4E7~j6Mm_oTK?7aFvsfx=4JER z4mMsk7i{45uI7Ra)9&WNdUv#zk4LbBdGEQvW7^dm#Q1UJHB4(?q#Vb~1dKp=>{B zhv(MgSb1~kcwV07S@(}|13s1IN3_OyD3)XU|6bJ2+UIDhhQr6Qa_mo#W53uw=9@#) zcsicPr}DTsj~wHDQ7;sXeBlj50VoI!f^iTUh{90>8UW(})F1UlA;=F#KS)$>6o&f2 z*bn)j!Ke@NhtVH}qBU8Wsr~v4g|7rD-?ApzL*yygDxp_;;m@#91lONgISo`qG$2aSC{ps}j8_UIa-_|^= z(meVow=gl?~Wo1Cam>(}zl)a`fv{;L)BVYLUh&2O)k#=SQquj)wi;hOiCMwGrE zIu7X?_Knlz*S5%YI z&lJz5y{#C!_iquGWlfKlR{U%4z5A#4X%8qK%>GN$p7NIXl}jQInIcbJ+V2RSr*D4Z zXqYqgs(5JenaO{QdT=cA(@zf?cf@?$y!To>vVI?5uXGP9-Sl4D_gh=*t_^=S;#Sjy zfxo>KOJ8c6axVD0#`Z~5{2eQo$EVACk>7i&+g_kUA%J0S2QUGLI2bzv=*>sg7H6{dNL zqLT2?sr^OQw+wtoo}!&>tU8jg`%-<>lZDQm-v(6=ef?0ejb=M(aw?-#vHr^2H}dpU%9$W_MgxLcIEB&dnco zXo7zodt=d^5cmGp>jxJ`G_6@yc3+Mj-#B*Qp&4~rVLHCv4hrNaZY`=-4U?K|>(%g!bD zmi2KL-4DFJ!nf@r9H#ZVu_sRtcr^Clx-Wg27fcUYJ;~?6_$#a3nc<(!{eAM)zb+fu z!kn9!8kQ*PRaf@Gy7pdUJ`^?YkI|Ua8GEm8Td-oV@rkJ&MSXQ@^Nb6TIw*0Zg@2Ss zC(f1t*5~}E@_xsA*0CMj%YvYn1wnrr0DUS1#t`UReV|+U!H8Q?0Q9P0 a7=xjI4TPTO52HWyxNzut5p35RjQ$793Zk9> literal 0 HcmV?d00001 diff --git a/app/src/main/java/com/qcxr/questcraft/JniBridge.java b/app/src/main/java/com/qcxr/questcraft/JniBridge.java index 0dbbac6..121a06e 100644 --- a/app/src/main/java/com/qcxr/questcraft/JniBridge.java +++ b/app/src/main/java/com/qcxr/questcraft/JniBridge.java @@ -11,6 +11,7 @@ public class JniBridge { public static native void start(MainActivity activity, AssetManager assetManager); public static native void stop(); + public static native void setSkinImage(byte[] imageBytes, boolean slim); public static void setVulkanSurface(Surface surface, int width, int height) { MainActivity.instance().ifPresent(me -> me.setVulkanSurface(surface, width, height)); diff --git a/app/src/main/java/com/qcxr/questcraft/MainActivity.java b/app/src/main/java/com/qcxr/questcraft/MainActivity.java index e1b850f..ee5367c 100644 --- a/app/src/main/java/com/qcxr/questcraft/MainActivity.java +++ b/app/src/main/java/com/qcxr/questcraft/MainActivity.java @@ -46,6 +46,10 @@ protected void onCreate(Bundle savedInstanceState) { // JudgeLib Init initJudgeLib(); + MojangSkinFetcher.fetchSkin("Slim").whenComplete((result,$) -> { + JniBridge.setSkinImage(result.skinPngBytes(), result.slim()); + }); + JniBridge.start(this, getAssets()); setContentView(UIActivity.createView(this)); } diff --git a/app/src/main/java/com/qcxr/questcraft/MojangSkinFetcher.java b/app/src/main/java/com/qcxr/questcraft/MojangSkinFetcher.java new file mode 100644 index 0000000..0f8247a --- /dev/null +++ b/app/src/main/java/com/qcxr/questcraft/MojangSkinFetcher.java @@ -0,0 +1,166 @@ +package com.qcxr.questcraft; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +public class MojangSkinFetcher { + + private static final String PROFILES_URL = "https://api.mojang.com/profiles/minecraft"; + private static final String SESSION_URL = "https://sessionserver.mojang.com/session/minecraft/profile/"; + + private static final ExecutorService EXECUTOR = Executors.newCachedThreadPool(); + + public record SkinResult(byte[] skinPngBytes, boolean slim) { } + + private record SkinMeta(String url, boolean slim) { } + + public static CompletableFuture fetchSkin(String username) { + return CompletableFuture.supplyAsync(() -> fetchSkinBlocking(username), EXECUTOR); + } + + private static SkinResult fetchSkinBlocking(String username) { + try { + String uuid = resolveUuid(username); + String texturesBase64 = fetchTexturesProperty(uuid); + SkinMeta meta = parseSkinUrlAndSlim(texturesBase64); + byte[] pngBytes = fetchSkinPngBytes(meta.url()); + return new SkinResult(pngBytes, meta.slim()); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + private static String resolveUuid(String username) throws IOException { + JsonArray requestBody = new JsonArray(); + requestBody.add(username); + + HttpURLConnection conn = (HttpURLConnection) new URL(PROFILES_URL).openConnection(); + conn.setRequestMethod("POST"); + conn.setRequestProperty("Content-Type", "application/json"); + conn.setDoOutput(true); + + try (OutputStream os = conn.getOutputStream()) { + os.write(requestBody.toString().getBytes(StandardCharsets.UTF_8)); + } + + String body = readBody(conn); + JsonElement parsed = JsonParser.parseString(body); + + if (!(parsed instanceof JsonArray arr) || arr.isEmpty()) { + throw new IOException("No matching Mojang profile for username: " + username); + } + + JsonObject first = arr.get(0).getAsJsonObject(); + return first.get("id").getAsString(); + } + + private static String fetchTexturesProperty(String uuid) throws IOException { + HttpURLConnection conn = (HttpURLConnection) new URL(SESSION_URL + uuid).openConnection(); + conn.setRequestMethod("GET"); + + String body = readBody(conn); + JsonObject profile = JsonParser.parseString(body).getAsJsonObject(); + JsonArray properties = profile.getAsJsonArray("properties"); + + for (JsonElement el : properties) { + JsonObject prop = el.getAsJsonObject(); + if ("textures".equals(prop.get("name").getAsString())) { + return prop.get("value").getAsString(); + } + } + + throw new IOException("No 'textures' property found for UUID: " + uuid); + } + + private static SkinMeta parseSkinUrlAndSlim(String texturesBase64) { + byte[] decoded = Base64.getDecoder().decode(texturesBase64); + String json = new String(decoded, StandardCharsets.UTF_8); + + JsonObject root = JsonParser.parseString(json).getAsJsonObject(); + JsonObject skin = root.getAsJsonObject("textures").getAsJsonObject("SKIN"); + String url = skin.get("url").getAsString(); + + boolean slim = skin.has("metadata") + && skin.getAsJsonObject("metadata").has("model") + && skin.getAsJsonObject("metadata").get("model").getAsString().equals("slim"); + + return new SkinMeta(url, slim); + } + + private static byte[] fetchSkinPngBytes(String skinUrl) throws IOException { + String httpsUrl = skinUrl.startsWith("http://") + ? "https://" + skinUrl.substring("http://".length()) + : skinUrl; + + HttpURLConnection conn = (HttpURLConnection) new URL(httpsUrl).openConnection(); + conn.setRequestMethod("GET"); + return readBytes(conn); + } + + private static boolean isSuccess(int status) { + return status / 100 == 2; + } + + private static String readBody(HttpURLConnection conn) throws IOException { + int status = conn.getResponseCode(); + InputStream stream = isSuccess(status) ? conn.getInputStream() : conn.getErrorStream(); + + if (stream == null) { + throw new IOException("HTTP " + status + " with no response body from " + conn.getURL()); + } + + StringBuilder sb = new StringBuilder(); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8))) { + String line; + while ((line = reader.readLine()) != null) { + sb.append(line); + } + } finally { + conn.disconnect(); + } + + if (!isSuccess(status)) { + throw new IOException("HTTP " + status + " from " + conn.getURL() + ": " + sb); + } + + return sb.toString(); + } + + private static byte[] readBytes(HttpURLConnection conn) throws IOException { + int status = conn.getResponseCode(); + InputStream stream = isSuccess(status) ? conn.getInputStream() : conn.getErrorStream(); + + if (stream == null) { + throw new IOException("HTTP " + status + " with no response body from " + conn.getURL()); + } + + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + try { + byte[] chunk = new byte[8192]; + int read; + while ((read = stream.read(chunk)) != -1) { + buffer.write(chunk, 0, read); + } + } finally { + stream.close(); + conn.disconnect(); + } + + if (!isSuccess(status)) { + throw new IOException("HTTP " + status + " fetching PNG from " + conn.getURL()); + } + + return buffer.toByteArray(); + } +} diff --git a/app/src/main/rust/cargo.toml b/app/src/main/rust/cargo.toml index c1dc1ff..3ed8d50 100644 --- a/app/src/main/rust/cargo.toml +++ b/app/src/main/rust/cargo.toml @@ -27,6 +27,7 @@ egui = { version = "0.35.0", features = [ "bytemuck" ] } gltf = { version = "1.4", features = [ "extras", "names" ] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" +image = "0.25" profiling = { version = "1.0", optional = true } puffin = { version = "0.20", optional = true } diff --git a/app/src/main/rust/src/app.rs b/app/src/main/rust/src/app.rs index d503232..603ba0b 100644 --- a/app/src/main/rust/src/app.rs +++ b/app/src/main/rust/src/app.rs @@ -12,7 +12,7 @@ use { Swapchain }, stage::Stage, - scene::scene::Scene, + scene::scene::{Scene, Skin, SkinType}, input::{InputState, ExtractedInputs, Hand}, instance::XrInstance, surface::{Surface, SurfaceManager, SurfaceTexture} @@ -24,7 +24,15 @@ use { ndk::asset::AssetManager, ndk_sys::{AAssetManager, AMOTION_EVENT_ACTION_DOWN, AMOTION_EVENT_ACTION_MOVE, AMOTION_EVENT_ACTION_UP}, openxr::{self as xr, EnvironmentBlendMode, FrameState, ViewConfigurationType}, - vk_graph::driver::ash::vk, + vk_graph::{ + driver::{ + ash::vk::{self, BufferUsageFlags}, + buffer::Buffer, + image::{Image, ImageInfoBuilder}, + }, + pool::hash::HashPool, + Graph, + }, log::info, }; @@ -154,7 +162,7 @@ pub fn main_loop(env: &mut Env<'_>, ctx: Arc, raw_asset_manager: *mu let mut context = XrContext::new(Arc::clone(&ctx)); let mut renderer = Renderer::new(&context); let input = InputState::new(&context.instance, &context.session.session); - let scene = Scene::load(&context.instance.device, &asset_manager); + let mut scene = Scene::load(&context.instance.device, &asset_manager); // if you're looking how to load assets n shit, it's in the scene ^^ let mut surface = Surface::new(env, 1920, 1080); @@ -162,8 +170,7 @@ pub fn main_loop(env: &mut Env<'_>, ctx: Arc, raw_asset_manager: *mu let surface_index = scene.surface_index.expect("Scene mesh must contain a node tagged as a surface! (see custom properties in Blender)"); let surface_node = &scene.assets.gltf_scene.nodes[surface_index]; - let surface_mesh = - &scene.assets.gltf_scene.meshes[surface_node.mesh_index.expect("Scene node tagged as surface doesn't contain a mesh (what are we supposed to render the texture onto??)")].primitives[0]; + let surface_mesh = &scene.assets.gltf_scene.meshes[surface_node.mesh_index.expect("Scene node tagged as surface doesn't contain a mesh (what are we supposed to render the texture onto??)")].primitives[0]; let surface_transform = surface_node.global_transform; let surface_manager = SurfaceManager::new(&asset_manager, &context.instance.device, &scene.assets.gltf_scene, surface_mesh); @@ -229,6 +236,42 @@ pub fn main_loop(env: &mut Env<'_>, ctx: Arc, raw_asset_manager: *mu last_surface_texture = Some(Arc::new(surface_texture)); } + if let Some(data) = jni_state::PENDING_SKIN_IMAGE.lock().unwrap().take() { + match image::load_from_memory(&data.png_bytes) { + Ok(img) => { + let gpu_image_info = ImageInfoBuilder::default() + .width(img.width()) + .height(img.height()) + .depth(1) + .format(vk::Format::R8G8B8A8_SRGB) + .usage(vk::ImageUsageFlags::SAMPLED | vk::ImageUsageFlags::TRANSFER_DST); + + let image = Arc::new(Image::create(&context.instance.device, gpu_image_info).unwrap()); + let mut graph = Graph::default(); + let image_node = graph.bind_resource(&image); + let image_buf = graph.bind_resource(Buffer::create_from_slice( + &context.instance.device, + BufferUsageFlags::TRANSFER_SRC, + img.as_bytes() + ).unwrap()); + graph.copy_buffer_to_image(image_buf, image_node); + graph.finalize().queue_submit(&mut HashPool::new(&context.instance.device), 0, 0).expect("Failed to upload images to GPU"); + + *scene.assets.skin.write().unwrap() = Some(Skin { + texture: image.clone(), + skin_type: { + if data.slim { + SkinType::Slim + } else { + SkinType::Wide + } + } + }); + } + Err(err) => log::error!("Bad skin supplied from java-side: {:?}", err) + } + } + let world_to_stage = stage.world_to_stage_matrix(); let stage_to_world = world_to_stage.inverse(); let eye_pos = stage_to_world.transform_point3(eye_pos); @@ -303,7 +346,7 @@ pub fn main_loop(env: &mut Env<'_>, ctx: Arc, raw_asset_manager: *mu ray_transform = Some(billboard_ray_transform(&transform, &eye_pos)); } } - scene.record_controller(graph, draw_payload, &transform, ray_transform); + scene.record_controller(graph, draw_payload, Hand::Left, &transform, ray_transform); } if let Some(ref transform) = inputs.right.matrix { let transform = stage_to_world * transform; @@ -313,7 +356,7 @@ pub fn main_loop(env: &mut Env<'_>, ctx: Arc, raw_asset_manager: *mu ray_transform = Some(billboard_ray_transform(&transform, &eye_pos)); } } - scene.record_controller(graph, draw_payload, &transform, ray_transform); + scene.record_controller(graph, draw_payload, Hand::Right, &transform, ray_transform); } }); if result.is_err() { diff --git a/app/src/main/rust/src/jni_state.rs b/app/src/main/rust/src/jni_state.rs index 345603e..06525db 100644 --- a/app/src/main/rust/src/jni_state.rs +++ b/app/src/main/rust/src/jni_state.rs @@ -15,10 +15,19 @@ use { }, }, glam::Vec2, - std::sync::atomic::AtomicBool + std::sync::{ + Mutex, + atomic::AtomicBool + } }; pub static SHOULD_STOP_JNI: AtomicBool = AtomicBool::new(false); +pub static PENDING_SKIN_IMAGE: Mutex> = Mutex::new(None); + +pub struct SkinData { + pub png_bytes: Vec, + pub slim: bool +} pub struct JniContext { pub jvm: JavaVM, diff --git a/app/src/main/rust/src/lib.rs b/app/src/main/rust/src/lib.rs index 14d4253..f3997fd 100644 --- a/app/src/main/rust/src/lib.rs +++ b/app/src/main/rust/src/lib.rs @@ -1,11 +1,10 @@ #![cfg(target_os = "android")] extern crate jni; -use jni::objects::JClass; use { std::{sync::atomic::Ordering, sync::Arc, thread}, - jni::{objects::JObject, EnvUnowned, jni_mangle}, - crate::jni_state::JniContext, + jni::{objects::{JObject, JByteArray, JClass}, EnvUnowned, jni_mangle, sys::jboolean}, + crate::jni_state::{JniContext, SkinData}, }; mod jni_state; @@ -76,4 +75,21 @@ pub fn stop( mut _unowned_env: EnvUnowned, ) { jni_state::SHOULD_STOP_JNI.store(true, Ordering::Relaxed); +} + +#[jni_mangle("com.qcxr.questcraft.JniBridge")] +pub fn set_skin_image<'local>( + mut unowned_env: EnvUnowned<'local>, + _: JClass<'local>, + image_bytes: JByteArray<'local>, + slim: jboolean, +) { + unowned_env.with_env(|env| -> jni::errors::Result<_> { + let bytes = env.convert_byte_array(&image_bytes)?; + *jni_state::PENDING_SKIN_IMAGE.lock().unwrap() = Some(SkinData { + png_bytes: bytes, + slim + }); + Ok(()) + }).resolve::(); } \ No newline at end of file diff --git a/app/src/main/rust/src/scene/gltf_model.rs b/app/src/main/rust/src/scene/gltf_model.rs index 6579f98..d3f0d5f 100644 --- a/app/src/main/rust/src/scene/gltf_model.rs +++ b/app/src/main/rust/src/scene/gltf_model.rs @@ -184,7 +184,7 @@ impl GltfScene { .resource_access(i_node, AccessType::IndexBuffer) .resource_access(v_node, AccessType::VertexBuffer) .resource_access(indirect_node, AccessType::IndirectBuffer); - + for (idx, texture) in self.textures.iter().enumerate() { let image_node = cmd_builder.bind_resource(texture); cmd_builder.set_shader_resource_access( @@ -204,6 +204,86 @@ impl GltfScene { } } + pub fn record_with_transform_override_texture(&self, graph: &mut Graph, draw_payload: &DrawPayload, transform: &Mat4, texture: Arc) { + #[cfg(feature = "profiled")] + profiling::function_scope!(); + + let v_node = graph.bind_resource(self.vertex_buffer.clone()); + let i_node = graph.bind_resource(self.index_buffer.clone()); + let instance_node = graph.bind_resource(self.instance_buffer.clone()); + let indirect_node = graph.bind_resource(self.indirect_buffer.clone()); + + let scene_transform = *transform; + let stride = size_of::() as vk::DeviceSize; + let no_cull_offset = stride * self.culled_draw_count as vk::DeviceSize; + + if self.culled_draw_count > 0 { + let mut cmd_builder = graph + .begin_cmd() + .debug_name(format!("Scene {} (culled)", self.identifier)) + .bind_pipeline(&*self.culled_pipeline) + .multiview(crate::render::renderer::VIEW_MASK, 0) + .shader_resource_access(0, *draw_payload.camera_ubo, AccessType::VertexShaderReadUniformBuffer) + .shader_resource_access(1, instance_node, AccessType::VertexShaderReadOther) + .color_attachment_image(0, *draw_payload.color_target, LoadOp::Load, StoreOp::Store) + .depth_stencil(DepthStencilInfo::DEPTH_WRITE_LESS) + .depth_stencil_attachment_image(*draw_payload.depth_target, LoadOp::Load, StoreOp::Store) + .resource_access(i_node, AccessType::IndexBuffer) + .resource_access(v_node, AccessType::VertexBuffer) + .resource_access(indirect_node, AccessType::IndirectBuffer); + + let image_node = cmd_builder.bind_resource(&texture); + for (idx, _) in self.textures.iter().enumerate() { + cmd_builder.set_shader_resource_access( + (2, [idx as u32]), + image_node, + AccessType::FragmentShaderReadSampledImageOrUniformTexelBuffer, + ); + } + + let draw_count = self.culled_draw_count; + cmd_builder.record_cmd(move |cmd| { + cmd.bind_index_buffer(i_node, 0, IndexType::UINT32) + .bind_vertex_buffer(0, v_node, 0) + .push_constants(0, bytes_of(&scene_transform)) + .draw_indexed_indirect(indirect_node, 0, draw_count, stride as u32); + }).end_cmd(); + } + + if self.no_cull_draw_count > 0 { + let mut cmd_builder = graph + .begin_cmd() + .debug_name(format!("Scene {} (no-cull)", self.identifier)) + .bind_pipeline(&*self.no_cull_pipeline) + .multiview(crate::render::renderer::VIEW_MASK, 0) + .shader_resource_access(0, *draw_payload.camera_ubo, AccessType::VertexShaderReadUniformBuffer) + .shader_resource_access(1, instance_node, AccessType::VertexShaderReadOther) + .color_attachment_image(0, *draw_payload.color_target, LoadOp::Load, StoreOp::Store) + .depth_stencil(DepthStencilInfo::DEPTH_WRITE_LESS) + .depth_stencil_attachment_image(*draw_payload.depth_target, LoadOp::Load, StoreOp::Store) + .resource_access(i_node, AccessType::IndexBuffer) + .resource_access(v_node, AccessType::VertexBuffer) + .resource_access(indirect_node, AccessType::IndirectBuffer); + + let image_node = cmd_builder.bind_resource(&texture); + for (idx, _) in self.textures.iter().enumerate() { + cmd_builder.set_shader_resource_access( + (2, [idx as u32]), + image_node, + AccessType::FragmentShaderReadSampledImageOrUniformTexelBuffer, + ); + } + + let draw_count = self.no_cull_draw_count; + cmd_builder.record_cmd(move |cmd| { + cmd.bind_index_buffer(i_node, 0, IndexType::UINT32) + .bind_vertex_buffer(0, v_node, 0) + .push_constants(0, bytes_of(&scene_transform)) + .draw_indexed_indirect(indirect_node, no_cull_offset, draw_count, stride as u32); + }).end_cmd(); + } + } + #[inline] fn convert_to_vk_format(gltf_format: Format, color: bool) -> vk::Format { match (gltf_format, color) { @@ -496,7 +576,7 @@ impl GltfScene { indirect_buffer, culled_draw_count, no_cull_draw_count, - node_extras + node_extras, } } diff --git a/app/src/main/rust/src/scene/scene.rs b/app/src/main/rust/src/scene/scene.rs index 1ad2a81..c98334e 100644 --- a/app/src/main/rust/src/scene/scene.rs +++ b/app/src/main/rust/src/scene/scene.rs @@ -1,27 +1,50 @@ use { crate::{ render::renderer::{self, DrawPayload}, - scene::gltf_model::{self, NodeIndex}, + input::Hand, + scene::{ + gltf_model::{GltfScene, NodeIndex, Vertex} + }, }, glam::Mat4, ndk::asset::AssetManager, - std::sync::Arc, + std::sync::{ + Arc, + RwLock + }, vk_graph::{ Graph, driver::{ ash::vk::{self, CullModeFlags, PrimitiveTopology}, device::Device, graphics::{BlendInfo, GraphicsPipeline, GraphicsPipelineInfo}, - shader::{SamplerInfoBuilder, Shader} + shader::{SamplerInfoBuilder, Shader}, + image::{Image} }, } }; +#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Copy, Clone)] +pub enum SkinType { + Wide, + Slim +} + +pub struct Skin { + pub texture: Arc, + pub skin_type: SkinType +} + pub struct Assets { - pub gltf_scene: Arc, - controller_scene: Arc, - ray_scene: Arc, - pointer_scene: Arc, + pub gltf_scene: Arc, + pub skin: RwLock>, + left_controller_scene: Arc, + right_controller_scene: Arc, + slim_left_controller_scene: Arc, + slim_right_controller_scene: Arc, + + ray_scene: Arc, + pointer_scene: Arc, } pub struct Scene { @@ -52,7 +75,7 @@ impl Scene { [ vk::VertexInputBindingDescription { binding: 0, - stride: size_of::() as u32, + stride: size_of::() as u32, input_rate: vk::VertexInputRate::VERTEX, } ], @@ -125,7 +148,7 @@ impl Scene { [ vk::VertexInputBindingDescription { binding: 0, - stride: size_of::() as u32, + stride: size_of::() as u32, input_rate: vk::VertexInputRate::VERTEX, } ], @@ -182,22 +205,35 @@ impl Scene { let simple_gltf_scene = { let asset = asset_manager.open(c"meshes/scene.glb").expect("Failed to load 'scene.glb'"); - Arc::new(gltf_model::GltfScene::new("Test".to_string(), asset, device, gltf_unlit_pipeline.clone(), gltf_unlit_no_cull_pipeline.clone())) + Arc::new(GltfScene::new("Test".to_string(), asset, device, gltf_unlit_pipeline.clone(), gltf_unlit_no_cull_pipeline.clone())) + }; + + let left_controller_scene = { + let asset = asset_manager.open(c"meshes/left_controller.glb").expect("Failed to load 'left_controller.glb'"); + Arc::new(GltfScene::new("Controller".to_string(), asset, device, gltf_unlit_pipeline.clone(), gltf_unlit_no_cull_pipeline.clone())) + }; + let right_controller_scene = { + let asset = asset_manager.open(c"meshes/right_controller.glb").expect("Failed to load 'right_controller.glb'"); + Arc::new(GltfScene::new("Controller".to_string(), asset, device, gltf_unlit_pipeline.clone(), gltf_unlit_no_cull_pipeline.clone())) }; - let controller_scene = { - let asset = asset_manager.open(c"meshes/controller.glb").expect("Failed to load 'controller.glb'"); - Arc::new(gltf_model::GltfScene::new("Controller".to_string(), asset, device, gltf_unlit_pipeline.clone(), gltf_unlit_no_cull_pipeline.clone())) + let slim_left_controller_scene = { + let asset = asset_manager.open(c"meshes/slim_left_controller.glb").expect("Failed to load 'slim_left_controller.glb'"); + Arc::new(GltfScene::new("Controller".to_string(), asset, device, gltf_unlit_pipeline.clone(), gltf_unlit_no_cull_pipeline.clone())) + }; + let slim_right_controller_scene = { + let asset = asset_manager.open(c"meshes/slim_right_controller.glb").expect("Failed to load 'slim_right_controller.glb'"); + Arc::new(GltfScene::new("Controller".to_string(), asset, device, gltf_unlit_pipeline.clone(), gltf_unlit_no_cull_pipeline.clone())) }; let ray_scene = { let asset = asset_manager.open(c"meshes/ray.glb").expect("Failed to load 'ray.glb'"); - Arc::new(gltf_model::GltfScene::new("Ray".to_string(), asset, device, gltf_unlit_translucent_pipeline.clone(), gltf_unlit_translucent_no_cull_pipeline.clone())) + Arc::new(GltfScene::new("Ray".to_string(), asset, device, gltf_unlit_translucent_pipeline.clone(), gltf_unlit_translucent_no_cull_pipeline.clone())) }; let pointer_scene = { let asset = asset_manager.open(c"meshes/pointer.glb").expect("Failed to load 'pointer.glb'"); - Arc::new(gltf_model::GltfScene::new("Pointer".to_string(), asset, device, gltf_unlit_translucent_pipeline.clone(), gltf_unlit_translucent_no_cull_pipeline.clone())) + Arc::new(GltfScene::new("Pointer".to_string(), asset, device, gltf_unlit_translucent_pipeline.clone(), gltf_unlit_translucent_no_cull_pipeline.clone())) }; let spawn_matrix = simple_gltf_scene.find_spawnpoint_transform(); @@ -217,7 +253,11 @@ impl Scene { let assets = Assets { gltf_scene: simple_gltf_scene, - controller_scene, + skin: RwLock::new(None), + left_controller_scene, + right_controller_scene, + slim_left_controller_scene, + slim_right_controller_scene, ray_scene, pointer_scene, }; @@ -232,8 +272,24 @@ impl Scene { self.assets.gltf_scene.record(graph, draw_payload); } - pub fn record_controller(&self, graph: &mut Graph, draw_payload: &DrawPayload, controller_matrix: &Mat4, ray_transform: Option) { - self.assets.controller_scene.record_with_transform(graph, draw_payload, controller_matrix); + pub fn record_controller(&self, graph: &mut Graph, draw_payload: &DrawPayload, hand: Hand, controller_matrix: &Mat4, ray_transform: Option) { + let skin = self.assets.skin.read().unwrap(); + let scene = match skin.as_ref().map_or(SkinType::Wide, |skin| { skin.skin_type }) { + SkinType::Wide => match hand { + Hand::Left => self.assets.left_controller_scene.clone(), + Hand::Right => self.assets.right_controller_scene.clone() + }, + SkinType::Slim => match hand { + Hand::Left => self.assets.slim_left_controller_scene.clone(), + Hand::Right => self.assets.slim_right_controller_scene.clone() + } + }; + + if let Some(ref skin) = *skin { + scene.record_with_transform_override_texture(graph, draw_payload, controller_matrix, skin.texture.clone()); + } else { + scene.record_with_transform(graph, draw_payload, controller_matrix); + } if let Some(ray_transform) = ray_transform { self.assets.ray_scene.record_with_transform(graph, draw_payload, &ray_transform); } diff --git a/blender_assets/controller.blend b/blender_assets/controller.blend deleted file mode 100644 index d514975b30a6678ee6fc0302c62aaee40e54367a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101392 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 S005{10ssR500027>XMHSL>brs diff --git a/blender_assets/default_skin.png b/blender_assets/default_skin.png new file mode 100644 index 0000000000000000000000000000000000000000..df87b45ebf6617db09b8d23433769da59a168389 GIT binary patch literal 853 zcmV-b1FHOqP)QvK59TPcS1EuB@jX#3MeQj0Dpe~XlOJg5(9dA zvw2>(gKJVfiSY0dga7~l0d!JMQvg8b*k%9#0**;UK~zW$?bd~kGgkmZ;mlTOd@b$Z~@r_6RABCIl2v5G{ah1tkT98BtO}wWOf-*zP=5 zumdN7wn+)qv!Cm8?>X%K^wfJ ziP8vt4G)w6x9l_g1C>yS1fgg-On?9|D^ZohHpqUJyu6Sn0J;>=Fa;+40h*>DXX_0b zks_5!OBHl|gCGGJBM_8GE-<2ifCBCMh!q+XP#}eM!Omk^?7$-w=s|+z{{lz>>8il; fe<2N`qGG|1B5-*oqAys%00000NkvXXu0mjf^Z;k> literal 0 HcmV?d00001 diff --git a/blender_assets/left_controller.blend b/blender_assets/left_controller.blend new file mode 100644 index 0000000000000000000000000000000000000000..d92c0753b6b9ed4229625b40d0fdad41c13062ad GIT binary patch literal 114185 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