{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreicuj3uqkbjclpkebmbaxx5yf23ouzpms5nac4itgnvvr7jfwth3qu",
    "uri": "at://did:plc:dxjzgxe7cvirxkwfjr2tjspt/app.bsky.feed.post/3mh2gugufmcd2"
  },
  "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"
}