{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreicuj3uqkbjclpkebmbaxx5yf23ouzpms5nac4itgnvvr7jfwth3qu",
"uri": "at://did:plc:dxjzgxe7cvirxkwfjr2tjspt/app.bsky.feed.post/3mgzulwwbanj2"
},
"path": "/t/an-attempt-at-vulkan/49433#post_5",
"publishedAt": "2026-03-14T13:10:27.000Z",
"site": "https://hub.jmonkeyengine.org",
"textContent": "\n 3月 14, 2026 9:07:20 下午 com.jme3.renderer.vulkan.VKRenderer initialize\n 信息: VKRenderer initialized. Caps=[FrameBuffer, FrameBufferMRT, GLSL150, GLSL330, GLSL400, GLSL410, GLSL420, GLSL430, GLSL440, GLSL450, VertexBufferArray, PackedDepthStencilBuffer, TextureCompressionS3TC, DepthTexture, GLSL310], limits={VertexTextureUnits=16, FragmentTextureUnits=16}\n java.lang.AssertionError: Shader compilation failed: jme-vert: error: #version: Desktop shaders for Vulkan SPIR-V require version 140 or higher\n jme-vert:324: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:325: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:326: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:327: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:328: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:329: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:330: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:331: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:632: warning: attribute deprecated in version 130; may be removed in future release\n jme-vert:632: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:638: warning: attribute deprecated in version 130; may be removed in future release\n jme-vert:638: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:639: warning: attribute deprecated in version 130; may be removed in future release\n jme-vert:639: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:640: warning: attribute deprecated in version 130; may be removed in future release\n jme-vert:640: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:642: warning: varying deprecated in version 130; may be removed in future release\n jme-vert:642: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:643: warning: varying deprecated in version 130; may be removed in future release\n jme-vert:643: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:645: warning: varying deprecated in version 130; may be removed in future release\n jme-vert:645: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:679: error: '' : unexpected token\n\n \tat com.jme3.renderer.vulkan.VKUtil.glslToSpirvFromString(VKUtil.java:388)\n \tat com.jme3.renderer.vulkan.VulkanShaders.getOrCreateModuleFromGlslString(VulkanShaders.java:60)\n \tat com.jme3.renderer.vulkan.VulkanPipeline.createGraphicsPipeline(VulkanPipeline.java:182)\n \tat com.jme3.renderer.vulkan.VulkanPipeline.init(VulkanPipeline.java:71)\n \tat com.jme3.renderer.vulkan.VulkanRuntime.getOrCreatePipeline(VulkanRuntime.java:166)\n \tat com.jme3.renderer.vulkan.VKRenderer.recordFrame(VKRenderer.java:427)\n \tat com.jme3.renderer.vulkan.VulkanFrameDriver.renderOneFrame(VulkanFrameDriver.java:116)\n \tat com.jme3.renderer.vulkan.VulkanRuntime.renderFrame(VulkanRuntime.java:323)\n \tat com.jme3.renderer.vulkan.LwjglVulkanContext.run(LwjglVulkanContext.java:73)\n \tat java.base/java.lang.Thread.run(Thread.java:833)\n 3月 14, 2026 9:07:20 下午 com.jme3.app.LegacyApplication handleError\n 严重: Vulkan render thread crashed\n java.lang.AssertionError: Shader compilation failed: jme-vert: error: #version: Desktop shaders for Vulkan SPIR-V require version 140 or higher\n jme-vert:324: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:325: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:326: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:327: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:328: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:329: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:330: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:331: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:632: warning: attribute deprecated in version 130; may be removed in future release\n jme-vert:632: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:638: warning: attribute deprecated in version 130; may be removed in future release\n jme-vert:638: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:639: warning: attribute deprecated in version 130; may be removed in future release\n jme-vert:639: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:640: warning: attribute deprecated in version 130; may be removed in future release\n jme-vert:640: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:642: warning: varying deprecated in version 130; may be removed in future release\n jme-vert:642: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:643: warning: varying deprecated in version 130; may be removed in future release\n jme-vert:643: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:645: warning: varying deprecated in version 130; may be removed in future release\n jme-vert:645: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:679: error: '' : unexpected token\n\n \tat com.jme3.renderer.vulkan.VKUtil.glslToSpirvFromString(VKUtil.java:388)\n \tat com.jme3.renderer.vulkan.VulkanShaders.getOrCreateModuleFromGlslString(VulkanShaders.java:60)\n \tat com.jme3.renderer.vulkan.VulkanPipeline.createGraphicsPipeline(VulkanPipeline.java:182)\n \tat com.jme3.renderer.vulkan.VulkanPipeline.init(VulkanPipeline.java:71)\n \tat com.jme3.renderer.vulkan.VulkanRuntime.getOrCreatePipeline(VulkanRuntime.java:166)\n \tat com.jme3.renderer.vulkan.VKRenderer.recordFrame(VKRenderer.java:427)\n \tat com.jme3.renderer.vulkan.VulkanFrameDriver.renderOneFrame(VulkanFrameDriver.java:116)\n \tat com.jme3.renderer.vulkan.VulkanRuntime.renderFrame(VulkanRuntime.java:323)\n \tat com.jme3.renderer.vulkan.LwjglVulkanContext.run(LwjglVulkanContext.java:73)\n \tat java.base/java.lang.Thread.run(Thread.java:833)\n\n 3月 14, 2026 9:07:20 下午 com.jme3.system.JmeSystemDelegate lambda$new$0\n 警告: JmeDialogsFactory implementation not found.\n Vulkan render thread crashed\n AssertionError: Shader compilation failed: jme-vert: error: #version: Desktop shaders for Vulkan SPIR-V require version 140 or higher\n jme-vert:324: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:325: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:326: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:327: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:328: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:329: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:330: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:331: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan\n jme-vert:632: warning: attribute deprecated in version 130; may be removed in future release\n jme-vert:632: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:638: warning: attribute deprecated in version 130; may be removed in future release\n jme-vert:638: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:639: warning: attribute deprecated in version 130; may be removed in future release\n jme-vert:639: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:640: warning: attribute deprecated in version 130; may be removed in future release\n jme-vert:640: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:642: warning: varying deprecated in version 130; may be removed in future release\n jme-vert:642: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:643: warning: varying deprecated in version 130; may be removed in future release\n jme-vert:643: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:645: warning: varying deprecated in version 130; may be removed in future release\n jme-vert:645: error: 'location' : SPIR-V requires location for user input/output\n jme-vert:679: error: '' : unexpected token\n\n\n\nIt seems that I have reached a crossroads regarding shaders. It seems that I can only choose to modify the writing method of the shaders or to abstract them to achieve compatibility between OpenGL and Vulkan.\nIt seems a bit challenging to simultaneously support GLSL inputs for both OpenGL and Vulkan. I need to look into how other engines achieve this.",
"title": "An attempt at Vulkan"
}