An attempt at Vulkan
jMonkeyEngine Hub
March 14, 2026
3月 14, 2026 9:07:20 下午 com.jme3.renderer.vulkan.VKRenderer initialize
信息: VKRenderer initialized. Caps=[FrameBuffer, FrameBufferMRT, GLSL150, GLSL330, GLSL400, GLSL410, GLSL420, GLSL430, GLSL440, GLSL450, VertexBufferArray, PackedDepthStencilBuffer, TextureCompressionS3TC, DepthTexture, GLSL310], limits={VertexTextureUnits=16, FragmentTextureUnits=16}
java.lang.AssertionError: Shader compilation failed: jme-vert: error: #version: Desktop shaders for Vulkan SPIR-V require version 140 or higher
jme-vert:324: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:325: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:326: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:327: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:328: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:329: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:330: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:331: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:632: warning: attribute deprecated in version 130; may be removed in future release
jme-vert:632: error: 'location' : SPIR-V requires location for user input/output
jme-vert:638: warning: attribute deprecated in version 130; may be removed in future release
jme-vert:638: error: 'location' : SPIR-V requires location for user input/output
jme-vert:639: warning: attribute deprecated in version 130; may be removed in future release
jme-vert:639: error: 'location' : SPIR-V requires location for user input/output
jme-vert:640: warning: attribute deprecated in version 130; may be removed in future release
jme-vert:640: error: 'location' : SPIR-V requires location for user input/output
jme-vert:642: warning: varying deprecated in version 130; may be removed in future release
jme-vert:642: error: 'location' : SPIR-V requires location for user input/output
jme-vert:643: warning: varying deprecated in version 130; may be removed in future release
jme-vert:643: error: 'location' : SPIR-V requires location for user input/output
jme-vert:645: warning: varying deprecated in version 130; may be removed in future release
jme-vert:645: error: 'location' : SPIR-V requires location for user input/output
jme-vert:679: error: '' : unexpected token
at com.jme3.renderer.vulkan.VKUtil.glslToSpirvFromString(VKUtil.java:388)
at com.jme3.renderer.vulkan.VulkanShaders.getOrCreateModuleFromGlslString(VulkanShaders.java:60)
at com.jme3.renderer.vulkan.VulkanPipeline.createGraphicsPipeline(VulkanPipeline.java:182)
at com.jme3.renderer.vulkan.VulkanPipeline.init(VulkanPipeline.java:71)
at com.jme3.renderer.vulkan.VulkanRuntime.getOrCreatePipeline(VulkanRuntime.java:166)
at com.jme3.renderer.vulkan.VKRenderer.recordFrame(VKRenderer.java:427)
at com.jme3.renderer.vulkan.VulkanFrameDriver.renderOneFrame(VulkanFrameDriver.java:116)
at com.jme3.renderer.vulkan.VulkanRuntime.renderFrame(VulkanRuntime.java:323)
at com.jme3.renderer.vulkan.LwjglVulkanContext.run(LwjglVulkanContext.java:73)
at java.base/java.lang.Thread.run(Thread.java:833)
3月 14, 2026 9:07:20 下午 com.jme3.app.LegacyApplication handleError
严重: Vulkan render thread crashed
java.lang.AssertionError: Shader compilation failed: jme-vert: error: #version: Desktop shaders for Vulkan SPIR-V require version 140 or higher
jme-vert:324: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:325: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:326: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:327: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:328: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:329: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:330: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:331: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:632: warning: attribute deprecated in version 130; may be removed in future release
jme-vert:632: error: 'location' : SPIR-V requires location for user input/output
jme-vert:638: warning: attribute deprecated in version 130; may be removed in future release
jme-vert:638: error: 'location' : SPIR-V requires location for user input/output
jme-vert:639: warning: attribute deprecated in version 130; may be removed in future release
jme-vert:639: error: 'location' : SPIR-V requires location for user input/output
jme-vert:640: warning: attribute deprecated in version 130; may be removed in future release
jme-vert:640: error: 'location' : SPIR-V requires location for user input/output
jme-vert:642: warning: varying deprecated in version 130; may be removed in future release
jme-vert:642: error: 'location' : SPIR-V requires location for user input/output
jme-vert:643: warning: varying deprecated in version 130; may be removed in future release
jme-vert:643: error: 'location' : SPIR-V requires location for user input/output
jme-vert:645: warning: varying deprecated in version 130; may be removed in future release
jme-vert:645: error: 'location' : SPIR-V requires location for user input/output
jme-vert:679: error: '' : unexpected token
at com.jme3.renderer.vulkan.VKUtil.glslToSpirvFromString(VKUtil.java:388)
at com.jme3.renderer.vulkan.VulkanShaders.getOrCreateModuleFromGlslString(VulkanShaders.java:60)
at com.jme3.renderer.vulkan.VulkanPipeline.createGraphicsPipeline(VulkanPipeline.java:182)
at com.jme3.renderer.vulkan.VulkanPipeline.init(VulkanPipeline.java:71)
at com.jme3.renderer.vulkan.VulkanRuntime.getOrCreatePipeline(VulkanRuntime.java:166)
at com.jme3.renderer.vulkan.VKRenderer.recordFrame(VKRenderer.java:427)
at com.jme3.renderer.vulkan.VulkanFrameDriver.renderOneFrame(VulkanFrameDriver.java:116)
at com.jme3.renderer.vulkan.VulkanRuntime.renderFrame(VulkanRuntime.java:323)
at com.jme3.renderer.vulkan.LwjglVulkanContext.run(LwjglVulkanContext.java:73)
at java.base/java.lang.Thread.run(Thread.java:833)
3月 14, 2026 9:07:20 下午 com.jme3.system.JmeSystemDelegate lambda$new$0
警告: JmeDialogsFactory implementation not found.
Vulkan render thread crashed
AssertionError: Shader compilation failed: jme-vert: error: #version: Desktop shaders for Vulkan SPIR-V require version 140 or higher
jme-vert:324: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:325: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:326: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:327: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:328: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:329: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:330: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:331: error: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan
jme-vert:632: warning: attribute deprecated in version 130; may be removed in future release
jme-vert:632: error: 'location' : SPIR-V requires location for user input/output
jme-vert:638: warning: attribute deprecated in version 130; may be removed in future release
jme-vert:638: error: 'location' : SPIR-V requires location for user input/output
jme-vert:639: warning: attribute deprecated in version 130; may be removed in future release
jme-vert:639: error: 'location' : SPIR-V requires location for user input/output
jme-vert:640: warning: attribute deprecated in version 130; may be removed in future release
jme-vert:640: error: 'location' : SPIR-V requires location for user input/output
jme-vert:642: warning: varying deprecated in version 130; may be removed in future release
jme-vert:642: error: 'location' : SPIR-V requires location for user input/output
jme-vert:643: warning: varying deprecated in version 130; may be removed in future release
jme-vert:643: error: 'location' : SPIR-V requires location for user input/output
jme-vert:645: warning: varying deprecated in version 130; may be removed in future release
jme-vert:645: error: 'location' : SPIR-V requires location for user input/output
jme-vert:679: error: '' : unexpected token
It 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.
It seems a bit challenging to simultaneously support GLSL inputs for both OpenGL and Vulkan. I need to look into how other engines achieve this.
Discussion in the ATmosphere