External Publication
Visit Post

An attempt at Vulkan

jMonkeyEngine Hub March 14, 2026
Source
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

Loading comments...