diff --git a/client/src/main/java/xyz/chunkstories/graphics/common/WorldRenderer.kt b/client/src/main/java/xyz/chunkstories/graphics/common/WorldRenderer.kt index ec19f122..40844d3b 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/common/WorldRenderer.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/common/WorldRenderer.kt @@ -2,11 +2,9 @@ package xyz.chunkstories.graphics.common import org.joml.Vector4d import xyz.chunkstories.api.client.IngameClient -import xyz.chunkstories.api.entity.traits.serializable.TraitControllable import xyz.chunkstories.api.graphics.TextureFormat import xyz.chunkstories.api.graphics.TextureTilingMode import xyz.chunkstories.api.graphics.rendergraph.* -import xyz.chunkstories.api.graphics.structs.Camera import xyz.chunkstories.api.graphics.systems.dispatching.* import xyz.chunkstories.api.graphics.systems.drawing.FarTerrainDrawer import xyz.chunkstories.api.graphics.systems.drawing.FullscreenQuadDrawer @@ -16,7 +14,7 @@ import xyz.chunkstories.graphics.GLFWBasedGraphicsBackend import xyz.chunkstories.graphics.common.world.doShadowMapping import xyz.chunkstories.graphics.vulkan.VulkanBackendOptions import xyz.chunkstories.graphics.vulkan.VulkanGraphicsBackend -import xyz.chunkstories.graphics.vulkan.systems.Vulkan3DVoxelRaytracer +import xyz.chunkstories.graphics.vulkan.systems.drawing.rt.Vulkan3DVoxelRaytracer import xyz.chunkstories.world.WorldClientCommon abstract class WorldRenderer(val world: WorldClientCommon) : Cleanable { diff --git a/client/src/main/java/xyz/chunkstories/graphics/common/shaders/compiler/ShaderCompilationParameters.kt b/client/src/main/java/xyz/chunkstories/graphics/common/shaders/compiler/ShaderCompilationParameters.kt index b1e39c79..29dbda99 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/common/shaders/compiler/ShaderCompilationParameters.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/common/shaders/compiler/ShaderCompilationParameters.kt @@ -2,7 +2,6 @@ package xyz.chunkstories.graphics.common.shaders.compiler import xyz.chunkstories.api.graphics.VertexFormat import xyz.chunkstories.api.graphics.rendergraph.PassOutputsDeclaration -import xyz.chunkstories.graphics.vulkan.systems.models.VulkanModelsDispatcher data class ShaderCompilationParameters(val outputs: PassOutputsDeclaration? = null, val inputs: List? = null, val defines: Map = emptyMap()) diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/ViewportSize.kt b/client/src/main/java/xyz/chunkstories/graphics/common/structs/ViewportSize.kt similarity index 65% rename from client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/ViewportSize.kt rename to client/src/main/java/xyz/chunkstories/graphics/common/structs/ViewportSize.kt index 6902541b..4a5679d9 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/ViewportSize.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/common/structs/ViewportSize.kt @@ -1,9 +1,8 @@ -package xyz.chunkstories.graphics.vulkan.systems.world +package xyz.chunkstories.graphics.common.structs import org.joml.Vector2i import xyz.chunkstories.api.graphics.structs.InterfaceBlock -//TODO move this stuff! class ViewportSize : InterfaceBlock { val size = Vector2i(0) } \ No newline at end of file diff --git a/client/src/main/java/xyz/chunkstories/graphics/opengl/OpenglGraphicsBackend.kt b/client/src/main/java/xyz/chunkstories/graphics/opengl/OpenglGraphicsBackend.kt index 1e47b784..a7401333 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/opengl/OpenglGraphicsBackend.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/opengl/OpenglGraphicsBackend.kt @@ -159,21 +159,29 @@ class OpenglGraphicsBackend(graphicsEngine: GraphicsEngineImplementation, window override fun createWorldRenderer(world: WorldClientCommon): WorldRenderer = OpenglWorldRenderer(this, world) - fun createDrawingSystem(pass: OpenglPass, registration: RegisteredGraphicSystem): OpenglDrawingSystem { + fun createDrawingSystem(pass: OpenglPass, registration: RegisteredGraphicSystem): OpenglDrawingSystem? { val dslCode = registration.dslCode as DrawingSystem.() -> Unit return when(registration.clazz) { GuiDrawer::class.java -> OpenglGuiDrawer(pass, dslCode) FullscreenQuadDrawer::class.java -> OpenglFullscreenQuadDrawer(pass, dslCode) - else -> throw Exception("Unimplemented system on this backend: ${registration.clazz}") + else -> { + logger.error("Unimplemented system on this backend: ${registration.clazz}") + null + //throw Exception("Unimplemented system on this backend: ${registration.clazz}") + } } } - fun getOrCreateDispatchingSystem(list: MutableList>, dispatchingSystemRegistration: RegisteredGraphicSystem) : OpenglDispatchingSystem<*> { + fun getOrCreateDispatchingSystem(list: MutableList>, dispatchingSystemRegistration: RegisteredGraphicSystem) : OpenglDispatchingSystem<*>? { val implemClass: Class> = when(dispatchingSystemRegistration.clazz) { ModelsRenderer::class.java -> OpenglModelsDispatcher::class ChunksRenderer::class.java -> OpenglChunkRepresentationsDispatcher::class - else -> throw Exception("Unimplemented system on this backend: ${dispatchingSystemRegistration.clazz}") + else -> { + logger.error("Unimplemented system on this backend: ${dispatchingSystemRegistration.clazz}") + return null + //throw Exception("Unimplemented system on this backend: ${dispatchingSystemRegistration.clazz}") + } }.java val existing = list.find { implemClass.isAssignableFrom(it::class.java) } diff --git a/client/src/main/java/xyz/chunkstories/graphics/opengl/graph/OpenglPass.kt b/client/src/main/java/xyz/chunkstories/graphics/opengl/graph/OpenglPass.kt index 0b8c345e..0817f819 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/opengl/graph/OpenglPass.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/opengl/graph/OpenglPass.kt @@ -1,7 +1,6 @@ package xyz.chunkstories.graphics.opengl.graph import org.lwjgl.opengl.ARBDirectStateAccess.* -import org.lwjgl.opengl.GL11 import org.lwjgl.opengl.GL33.* import xyz.chunkstories.api.graphics.rendergraph.PassDeclaration @@ -11,11 +10,11 @@ import xyz.chunkstories.api.graphics.systems.dispatching.DispatchingSystem import xyz.chunkstories.api.graphics.systems.drawing.DrawingSystem import xyz.chunkstories.api.util.kotlin.toVec4f import xyz.chunkstories.graphics.common.Cleanable +import xyz.chunkstories.graphics.common.structs.ViewportSize import xyz.chunkstories.graphics.opengl.OpenglFrame import xyz.chunkstories.graphics.opengl.OpenglGraphicsBackend import xyz.chunkstories.graphics.opengl.systems.OpenglDispatchingSystem import xyz.chunkstories.graphics.opengl.systems.OpenglDrawingSystem -import xyz.chunkstories.graphics.vulkan.systems.world.ViewportSize class OpenglPass(val backend: OpenglGraphicsBackend, val renderTask: OpenglRenderTask, val declaration: PassDeclaration) : Cleanable { val drawingSystems: List @@ -57,10 +56,10 @@ class OpenglPass(val backend: OpenglGraphicsBackend, val renderTask: OpenglRende declaration.draws?.registeredSystems?.let { for (registeredSystem in it) { if (DrawingSystem::class.java.isAssignableFrom(registeredSystem.clazz)) { - val drawingSystem = backend.createDrawingSystem(this, registeredSystem as RegisteredGraphicSystem) + val drawingSystem = backend.createDrawingSystem(this, registeredSystem as RegisteredGraphicSystem) ?: continue drawingSystems.add(drawingSystem) } else if (DispatchingSystem::class.java.isAssignableFrom(registeredSystem.clazz)) { - val dispatchingSystem = backend.getOrCreateDispatchingSystem(renderTask.renderGraph.dispatchingSystems, registeredSystem as RegisteredGraphicSystem) + val dispatchingSystem = backend.getOrCreateDispatchingSystem(renderTask.renderGraph.dispatchingSystems, registeredSystem as RegisteredGraphicSystem) ?: continue val drawer = dispatchingSystem.createDrawerForPass(this, registeredSystem.dslCode as OpenglDispatchingSystem.Drawer<*>.() -> Unit) dispatchingSystem.drawersInstances.add(drawer) diff --git a/client/src/main/java/xyz/chunkstories/graphics/opengl/graph/OpenglRenderGraph.kt b/client/src/main/java/xyz/chunkstories/graphics/opengl/graph/OpenglRenderGraph.kt index 8dceb4e3..a3b0b054 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/opengl/graph/OpenglRenderGraph.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/opengl/graph/OpenglRenderGraph.kt @@ -54,8 +54,8 @@ class OpenglRenderGraph(val backend: OpenglGraphicsBackend, val dslCode: RenderG val ctxMask = 1 shl renderContextIndex val jobsForPassInstance = jobs[index] - for (bucket in gathered.buckets.values) { - val responsibleSystem = dispatchingSystems.find { it.representationName == bucket.representationName } ?: continue + for (representationBuckets in gathered.buckets.values) { + val responsibleSystem = dispatchingSystems.find { it.representationName == representationBuckets.representationName } ?: continue val drawers = openglPassInstance.pass.dispatchingDrawers.filter { it.system == responsibleSystem @@ -68,10 +68,18 @@ class OpenglRenderGraph(val backend: OpenglGraphicsBackend, val dslCode: RenderG } } - TODO() - /*for (i in 0 until bucket.representations.size) { - val item = bucket.representations[i] - val mask = bucket.masks[i] + for((mask, bucket) in representationBuckets.maskedBuckets) { + if (mask and ctxMask == 0) + continue + + for(item in bucket.representations) { + (responsibleSystem as OpenglDispatchingSystem).sort(item, drawersArray, allowedOutputs as List>) + } + } + + /*for (i in 0 until representationBuckets.representations.size) { + val item = representationBuckets.representations[i] + val mask = representationBuckets.masks[i] if (mask and ctxMask == 0) continue diff --git a/client/src/main/java/xyz/chunkstories/graphics/opengl/voxels/OpenglVoxelTexturesArray.kt b/client/src/main/java/xyz/chunkstories/graphics/opengl/voxels/OpenglVoxelTexturesArray.kt index 7c416593..84386ae2 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/opengl/voxels/OpenglVoxelTexturesArray.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/opengl/voxels/OpenglVoxelTexturesArray.kt @@ -9,7 +9,6 @@ import xyz.chunkstories.graphics.common.util.toByteBuffer import xyz.chunkstories.graphics.common.voxel.VoxelTexturesArray import xyz.chunkstories.graphics.opengl.OpenglGraphicsBackend import xyz.chunkstories.graphics.opengl.textures.OpenglOnionTexture2D -import xyz.chunkstories.graphics.vulkan.systems.gui.guiBufferSize import java.awt.image.BufferedImage class OpenglVoxelTexturesArray(val backend: OpenglGraphicsBackend, voxels: Content.Voxels) : VoxelTexturesArray(voxels), Cleanable { diff --git a/client/src/main/java/xyz/chunkstories/graphics/opengl/world/chunks/OpenglChunkRepresentationsProvider.kt b/client/src/main/java/xyz/chunkstories/graphics/opengl/world/chunks/OpenglChunkRepresentationsProvider.kt index 2fb324e0..b9d93f88 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/opengl/world/chunks/OpenglChunkRepresentationsProvider.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/opengl/world/chunks/OpenglChunkRepresentationsProvider.kt @@ -2,7 +2,6 @@ package xyz.chunkstories.graphics.opengl.world.chunks import xyz.chunkstories.graphics.common.world.ChunkRepresentationsProvider import xyz.chunkstories.graphics.opengl.OpenglGraphicsBackend -import xyz.chunkstories.graphics.vulkan.systems.VulkanDispatchingSystem import xyz.chunkstories.world.WorldClientCommon class OpenglChunkRepresentationsProvider(backend: OpenglGraphicsBackend, world: WorldClientCommon) : diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/graph/VulkanFrameGraph.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/graph/VulkanFrameGraph.kt index dc828e28..c4a059d7 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/graph/VulkanFrameGraph.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/graph/VulkanFrameGraph.kt @@ -5,11 +5,11 @@ import org.lwjgl.vulkan.VkCommandBuffer import xyz.chunkstories.api.graphics.rendergraph.* import xyz.chunkstories.api.graphics.shader.ShaderResources import xyz.chunkstories.api.graphics.structs.Camera +import xyz.chunkstories.graphics.common.structs.ViewportSize import xyz.chunkstories.graphics.vulkan.Pipeline import xyz.chunkstories.graphics.vulkan.resources.VulkanShaderResourcesContext import xyz.chunkstories.graphics.vulkan.shaders.extractInto import xyz.chunkstories.graphics.vulkan.swapchain.VulkanFrame -import xyz.chunkstories.graphics.vulkan.systems.world.ViewportSize class VulkanFrameGraph(val frame: VulkanFrame, val renderGraph: VulkanRenderGraph, startTask: VulkanRenderTask, mainCamera: Camera, parameters: Map) { val rootNode: FrameGraphNode diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/graph/VulkanPass.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/graph/VulkanPass.kt index 671c384c..8f1378cd 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/graph/VulkanPass.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/graph/VulkanPass.kt @@ -13,10 +13,10 @@ import xyz.chunkstories.graphics.common.Cleanable import xyz.chunkstories.graphics.vulkan.RenderPass import xyz.chunkstories.graphics.vulkan.VulkanGraphicsBackend import xyz.chunkstories.graphics.vulkan.swapchain.VulkanFrame -import xyz.chunkstories.graphics.vulkan.systems.VulkanDispatchingSystem -import xyz.chunkstories.graphics.vulkan.systems.VulkanDrawingSystem -import xyz.chunkstories.graphics.vulkan.systems.createDrawingSystem -import xyz.chunkstories.graphics.vulkan.systems.getOrCreateDispatchingSystem +import xyz.chunkstories.graphics.vulkan.systems.dispatching.VulkanDispatchingSystem +import xyz.chunkstories.graphics.vulkan.systems.drawing.VulkanDrawingSystem +import xyz.chunkstories.graphics.vulkan.systems.dispatching.getOrCreateDispatchingSystem +import xyz.chunkstories.graphics.vulkan.systems.drawing.createDrawingSystem import xyz.chunkstories.graphics.vulkan.util.VkFramebuffer import xyz.chunkstories.graphics.vulkan.util.ensureIs @@ -39,7 +39,7 @@ open class VulkanPass(val backend: VulkanGraphicsBackend, val renderTask: Vulkan for (registeredSystem in it) { if (DrawingSystem::class.java.isAssignableFrom(registeredSystem.clazz)) { - val drawingSystem = backend.createDrawingSystem(this, registeredSystem as RegisteredGraphicSystem) as VulkanDrawingSystem + val drawingSystem = backend.createDrawingSystem(this, registeredSystem as RegisteredGraphicSystem) ?: continue //val d = declaredDrawingSystem.dslCode as GraphicSystem.() -> Unit //drawingSystem.apply(d) diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/graph/VulkanRenderGraph.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/graph/VulkanRenderGraph.kt index 9f9313e8..fcf4949d 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/graph/VulkanRenderGraph.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/graph/VulkanRenderGraph.kt @@ -17,7 +17,7 @@ import xyz.chunkstories.graphics.vulkan.VulkanGraphicsBackend import xyz.chunkstories.graphics.vulkan.debug.exportRenderGraphPng import xyz.chunkstories.graphics.vulkan.swapchain.SwapchainBlitHelper import xyz.chunkstories.graphics.vulkan.swapchain.VulkanFrame -import xyz.chunkstories.graphics.vulkan.systems.VulkanDispatchingSystem +import xyz.chunkstories.graphics.vulkan.systems.dispatching.VulkanDispatchingSystem import xyz.chunkstories.graphics.vulkan.util.ensureIs class VulkanRenderGraph(val backend: VulkanGraphicsBackend, val dslCode: RenderGraphDeclaration.() -> Unit) : Cleanable { diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/VulkanDispatchingSystem.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/VulkanDispatchingSystem.kt deleted file mode 100644 index b887909a..00000000 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/VulkanDispatchingSystem.kt +++ /dev/null @@ -1,42 +0,0 @@ -package xyz.chunkstories.graphics.vulkan.systems - -import org.lwjgl.vulkan.VkCommandBuffer -import xyz.chunkstories.api.graphics.representation.Representation -import xyz.chunkstories.api.graphics.systems.dispatching.DispatchingSystem -import xyz.chunkstories.graphics.common.Cleanable -import xyz.chunkstories.graphics.common.representations.RepresentationsGathered -import xyz.chunkstories.graphics.vulkan.VulkanGraphicsBackend -import xyz.chunkstories.graphics.vulkan.graph.VulkanPass -import xyz.chunkstories.graphics.vulkan.graph.VulkanPassInstance -import xyz.chunkstories.graphics.vulkan.graph.VulkanRenderTaskInstance -import xyz.chunkstories.graphics.vulkan.swapchain.VulkanFrame - -typealias VulkanDispatchingSystemType = VulkanDispatchingSystem<*> - -abstract class VulkanDispatchingSystem(val backend: VulkanGraphicsBackend) : Cleanable { - val drawersInstances = mutableListOf() - - abstract val representationName: String - - /** The drawer's job is to draw "things". The term is deliberatly loose: the drawer might directly work with the representations - * the parent system is fed, or it might operate on a different type, perhaps a component of the bigger Representation like it's done - * for ModelInstances or ChunkRepresentations*/ - abstract class Drawer(val pass: VulkanPass) : Cleanable, DispatchingSystem { - abstract val system: VulkanDispatchingSystemType - - override val representationName: String - get() = system.representationName - - abstract fun registerDrawingCommands(drawerWork: DrawerWork) - } - - abstract class DrawerWork(val drawerInstance: Pair) { - abstract fun isEmpty(): Boolean - - lateinit var cmdBuffer: VkCommandBuffer - } - - abstract fun createDrawerForPass(pass: VulkanPass, drawerInitCode: Drawer.() -> Unit): Drawer - - abstract fun sortWork(frame: VulkanFrame, drawers: Map>>, maskedBuckets: Map): Map, DrawerWork> -} \ No newline at end of file diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/VulkanDrawingSystem.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/VulkanDrawingSystem.kt deleted file mode 100644 index eafb27fb..00000000 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/VulkanDrawingSystem.kt +++ /dev/null @@ -1,14 +0,0 @@ -package xyz.chunkstories.graphics.vulkan.systems - -import xyz.chunkstories.api.graphics.systems.drawing.DrawingSystem -import xyz.chunkstories.graphics.vulkan.graph.VulkanPass -import xyz.chunkstories.graphics.common.Cleanable -import org.lwjgl.vulkan.VkCommandBuffer -import xyz.chunkstories.graphics.vulkan.graph.VulkanPassInstance - -/** Drawing systems are instanced per-declared pass for now */ -abstract class VulkanDrawingSystem(val pass: VulkanPass) : DrawingSystem, Cleanable { - - /** Registers drawing commands (pipeline bind, vertex buffer binds, draw calls etc */ - abstract fun registerDrawingCommands(context: VulkanPassInstance, commandBuffer: VkCommandBuffer) -} \ No newline at end of file diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/VulkanGraphicsSystems.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/VulkanGraphicsSystems.kt deleted file mode 100644 index 5932f86f..00000000 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/VulkanGraphicsSystems.kt +++ /dev/null @@ -1,68 +0,0 @@ -package xyz.chunkstories.graphics.vulkan.systems - -import xyz.chunkstories.api.graphics.systems.RegisteredGraphicSystem -import xyz.chunkstories.api.graphics.systems.dispatching.* -import xyz.chunkstories.api.graphics.systems.drawing.DrawingSystem -import xyz.chunkstories.api.graphics.systems.drawing.FarTerrainDrawer -import xyz.chunkstories.api.graphics.systems.drawing.FullscreenQuadDrawer -import xyz.chunkstories.api.gui.GuiDrawer -import xyz.chunkstories.graphics.vulkan.VulkanGraphicsBackend -import xyz.chunkstories.graphics.vulkan.VulkanGraphicsBackend.Companion.logger -import xyz.chunkstories.graphics.vulkan.graph.VulkanPass -import xyz.chunkstories.graphics.vulkan.systems.debug.VulkanDebugDrawer -import xyz.chunkstories.graphics.vulkan.systems.debug.VulkanSpinningCubeDrawer -import xyz.chunkstories.graphics.vulkan.systems.gui.VulkanGuiDrawer -import xyz.chunkstories.graphics.vulkan.systems.lighting.VulkanDefferedLightsDispatcher -import xyz.chunkstories.graphics.vulkan.systems.models.VulkanLinesDispatcher -import xyz.chunkstories.graphics.vulkan.systems.models.VulkanModelsDispatcher -import xyz.chunkstories.graphics.vulkan.systems.models.VulkanSpritesDispatcher -import xyz.chunkstories.graphics.vulkan.systems.world.VulkanChunkRepresentationsDispatcher -import xyz.chunkstories.graphics.vulkan.systems.world.farterrain.VulkanFarTerrainRenderer - -fun VulkanGraphicsBackend.createDrawingSystem(pass: VulkanPass, registration: RegisteredGraphicSystem): VulkanDrawingSystem { - val dslCode = registration.dslCode as DrawingSystem.() -> Unit - - return when (registration.clazz) { - GuiDrawer::class.java -> VulkanGuiDrawer(pass, window.client.gui) - FullscreenQuadDrawer::class.java -> VulkanFullscreenQuadDrawer(pass, dslCode) - FarTerrainDrawer::class.java -> VulkanFarTerrainRenderer(pass, dslCode) - - Vulkan3DVoxelRaytracer::class.java -> Vulkan3DVoxelRaytracer(pass, dslCode) - VulkanSpinningCubeDrawer::class.java -> VulkanSpinningCubeDrawer(pass, dslCode) - VulkanDebugDrawer::class.java -> VulkanDebugDrawer(pass, dslCode, window.client.ingame!!) - - else -> throw Exception("Unimplemented system on this backend: ${registration.clazz}") - } -} - -fun VulkanGraphicsBackend.getOrCreateDispatchingSystem(list: MutableList>, dispatchingSystemRegistration: RegisteredGraphicSystem): VulkanDispatchingSystem<*>? { - val implemClass = when(dispatchingSystemRegistration.clazz) { - ChunksRenderer::class.java -> VulkanChunkRepresentationsDispatcher::class - ModelsRenderer::class.java -> VulkanModelsDispatcher::class - SpritesRenderer::class.java -> VulkanSpritesDispatcher::class - LinesRenderer::class.java -> VulkanLinesDispatcher::class - DefferedLightsRenderer::class.java -> VulkanDefferedLightsDispatcher::class - else -> throw Exception("Unimplemented system on this backend: ${dispatchingSystemRegistration.clazz}") - }.java - - val existing = list.find { implemClass.isAssignableFrom(it::class.java) } - if(existing != null) - return existing - - val new: VulkanDispatchingSystem<*> = when(dispatchingSystemRegistration.clazz) { - ChunksRenderer::class.java -> VulkanChunkRepresentationsDispatcher(this) - ModelsRenderer::class.java -> VulkanModelsDispatcher(this) - SpritesRenderer::class.java -> VulkanSpritesDispatcher(this) - LinesRenderer::class.java -> VulkanLinesDispatcher(this) - DefferedLightsRenderer::class.java -> VulkanDefferedLightsDispatcher(this) - else -> { - //throw Exception("Unimplemented system on this backend: ${dispatchingSystemRegistration.clazz}") - logger.error("Unimplemented system on this backend: ${dispatchingSystemRegistration.clazz}") - return null - } - } - - list.add(new) - - return new -} diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/VulkanDispatchingSystems.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/VulkanDispatchingSystems.kt new file mode 100644 index 00000000..d9fb3189 --- /dev/null +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/VulkanDispatchingSystems.kt @@ -0,0 +1,80 @@ +package xyz.chunkstories.graphics.vulkan.systems.dispatching + +import org.lwjgl.vulkan.VkCommandBuffer +import xyz.chunkstories.api.graphics.representation.Representation +import xyz.chunkstories.api.graphics.systems.RegisteredGraphicSystem +import xyz.chunkstories.api.graphics.systems.dispatching.* +import xyz.chunkstories.graphics.common.Cleanable +import xyz.chunkstories.graphics.common.representations.RepresentationsGathered +import xyz.chunkstories.graphics.vulkan.VulkanGraphicsBackend +import xyz.chunkstories.graphics.vulkan.graph.VulkanPass +import xyz.chunkstories.graphics.vulkan.graph.VulkanPassInstance +import xyz.chunkstories.graphics.vulkan.graph.VulkanRenderTaskInstance +import xyz.chunkstories.graphics.vulkan.swapchain.VulkanFrame +import xyz.chunkstories.graphics.vulkan.systems.dispatching.chunks.VulkanChunkRepresentationsDispatcher +import xyz.chunkstories.graphics.vulkan.systems.dispatching.lights.VulkanDefferedLightsDispatcher +import xyz.chunkstories.graphics.vulkan.systems.dispatching.lines.VulkanLinesDispatcher +import xyz.chunkstories.graphics.vulkan.systems.dispatching.models.VulkanModelsDispatcher +import xyz.chunkstories.graphics.vulkan.systems.dispatching.sprites.VulkanSpritesDispatcher + +typealias VulkanDispatchingSystemType = VulkanDispatchingSystem<*> + +abstract class VulkanDispatchingSystem(val backend: VulkanGraphicsBackend) : Cleanable { + val drawersInstances = mutableListOf() + + abstract val representationName: String + + /** The drawer's job is to draw "things". The term is deliberatly loose: the drawer might directly work with the representations + * the parent system is fed, or it might operate on a different type, perhaps a component of the bigger Representation like it's done + * for ModelInstances or ChunkRepresentations*/ + abstract class Drawer(val pass: VulkanPass) : Cleanable, DispatchingSystem { + abstract val system: VulkanDispatchingSystemType + + override val representationName: String + get() = system.representationName + + abstract fun registerDrawingCommands(drawerWork: DrawerWork) + } + + abstract class DrawerWork(val drawerInstance: Pair) { + abstract fun isEmpty(): Boolean + + lateinit var cmdBuffer: VkCommandBuffer + } + + abstract fun createDrawerForPass(pass: VulkanPass, drawerInitCode: Drawer.() -> Unit): Drawer + + abstract fun sortWork(frame: VulkanFrame, drawers: Map>>, maskedBuckets: Map): Map, DrawerWork> +} + +fun VulkanGraphicsBackend.getOrCreateDispatchingSystem(list: MutableList>, dispatchingSystemRegistration: RegisteredGraphicSystem): VulkanDispatchingSystem<*>? { + val implemClass = when(dispatchingSystemRegistration.clazz) { + ChunksRenderer::class.java -> VulkanChunkRepresentationsDispatcher::class + ModelsRenderer::class.java -> VulkanModelsDispatcher::class + SpritesRenderer::class.java -> VulkanSpritesDispatcher::class + LinesRenderer::class.java -> VulkanLinesDispatcher::class + DefferedLightsRenderer::class.java -> VulkanDefferedLightsDispatcher::class + else -> throw Exception("Unimplemented system on this backend: ${dispatchingSystemRegistration.clazz}") + }.java + + val existing = list.find { implemClass.isAssignableFrom(it::class.java) } + if(existing != null) + return existing + + val new: VulkanDispatchingSystem<*> = when(dispatchingSystemRegistration.clazz) { + ChunksRenderer::class.java -> VulkanChunkRepresentationsDispatcher(this) + ModelsRenderer::class.java -> VulkanModelsDispatcher(this) + SpritesRenderer::class.java -> VulkanSpritesDispatcher(this) + LinesRenderer::class.java -> VulkanLinesDispatcher(this) + DefferedLightsRenderer::class.java -> VulkanDefferedLightsDispatcher(this) + else -> { + //throw Exception("Unimplemented system on this backend: ${dispatchingSystemRegistration.clazz}") + VulkanGraphicsBackend.logger.error("Unimplemented system on this backend: ${dispatchingSystemRegistration.clazz}") + return null + } + } + + list.add(new) + + return new +} \ No newline at end of file diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/TaskCreateVulkanChunkRepresentation.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/chunks/TaskCreateVulkanChunkRepresentation.kt similarity index 96% rename from client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/TaskCreateVulkanChunkRepresentation.kt rename to client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/chunks/TaskCreateVulkanChunkRepresentation.kt index 60470cfe..9b724fcc 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/TaskCreateVulkanChunkRepresentation.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/chunks/TaskCreateVulkanChunkRepresentation.kt @@ -1,4 +1,4 @@ -package xyz.chunkstories.graphics.vulkan.systems.world +package xyz.chunkstories.graphics.vulkan.systems.dispatching.chunks import xyz.chunkstories.graphics.common.world.TaskCreateChunkMesh import xyz.chunkstories.graphics.vulkan.VulkanGraphicsBackend diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/VulkanChunkMeshProperty.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/chunks/VulkanChunkMeshProperty.kt similarity index 95% rename from client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/VulkanChunkMeshProperty.kt rename to client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/chunks/VulkanChunkMeshProperty.kt index 8a84992e..93e12146 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/VulkanChunkMeshProperty.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/chunks/VulkanChunkMeshProperty.kt @@ -1,4 +1,4 @@ -package xyz.chunkstories.graphics.vulkan.systems.world +package xyz.chunkstories.graphics.vulkan.systems.dispatching.chunks import xyz.chunkstories.api.world.chunk.ChunkMesh import xyz.chunkstories.graphics.vulkan.VulkanGraphicsBackend diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/VulkanChunkRepresentation.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/chunks/VulkanChunkRepresentation.kt similarity index 95% rename from client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/VulkanChunkRepresentation.kt rename to client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/chunks/VulkanChunkRepresentation.kt index b766a369..24fe5f58 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/VulkanChunkRepresentation.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/chunks/VulkanChunkRepresentation.kt @@ -1,4 +1,4 @@ -package xyz.chunkstories.graphics.vulkan.systems.world +package xyz.chunkstories.graphics.vulkan.systems.dispatching.chunks import xyz.chunkstories.graphics.common.world.ChunkRepresentation import xyz.chunkstories.graphics.vulkan.buffers.VulkanVertexBuffer diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/VulkanChunkRepresentationsDispatcher.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/chunks/VulkanChunkRepresentationsDispatcher.kt similarity index 98% rename from client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/VulkanChunkRepresentationsDispatcher.kt rename to client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/chunks/VulkanChunkRepresentationsDispatcher.kt index a223748c..2044dba7 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/VulkanChunkRepresentationsDispatcher.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/chunks/VulkanChunkRepresentationsDispatcher.kt @@ -1,4 +1,4 @@ -package xyz.chunkstories.graphics.vulkan.systems.world +package xyz.chunkstories.graphics.vulkan.systems.dispatching.chunks import org.lwjgl.system.MemoryStack.* import org.lwjgl.vulkan.VK10.* @@ -21,7 +21,7 @@ import xyz.chunkstories.graphics.vulkan.graph.VulkanPass import xyz.chunkstories.graphics.vulkan.graph.VulkanPassInstance import xyz.chunkstories.graphics.vulkan.graph.VulkanRenderTaskInstance import xyz.chunkstories.graphics.vulkan.swapchain.VulkanFrame -import xyz.chunkstories.graphics.vulkan.systems.VulkanDispatchingSystem +import xyz.chunkstories.graphics.vulkan.systems.dispatching.VulkanDispatchingSystem import xyz.chunkstories.graphics.vulkan.textures.VulkanSampler import xyz.chunkstories.graphics.vulkan.textures.voxels.VulkanVoxelTexturesArray diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/VulkanChunkRepresentationsProvider.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/chunks/VulkanChunkRepresentationsProvider.kt similarity index 94% rename from client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/VulkanChunkRepresentationsProvider.kt rename to client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/chunks/VulkanChunkRepresentationsProvider.kt index 3bc0002d..31f44d53 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/VulkanChunkRepresentationsProvider.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/chunks/VulkanChunkRepresentationsProvider.kt @@ -1,4 +1,4 @@ -package xyz.chunkstories.graphics.vulkan.systems.world +package xyz.chunkstories.graphics.vulkan.systems.dispatching.chunks import xyz.chunkstories.graphics.common.world.ChunkRepresentationsProvider import xyz.chunkstories.graphics.vulkan.VulkanGraphicsBackend diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/lighting/VulkanDefferedLightsDispatcher.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/lights/VulkanDefferedLightsDispatcher.kt similarity index 97% rename from client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/lighting/VulkanDefferedLightsDispatcher.kt rename to client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/lights/VulkanDefferedLightsDispatcher.kt index d45dc77d..eb11257d 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/lighting/VulkanDefferedLightsDispatcher.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/lights/VulkanDefferedLightsDispatcher.kt @@ -1,4 +1,4 @@ -package xyz.chunkstories.graphics.vulkan.systems.lighting +package xyz.chunkstories.graphics.vulkan.systems.dispatching.lights import org.lwjgl.system.MemoryStack import org.lwjgl.system.MemoryStack.stackLongs @@ -18,7 +18,7 @@ import xyz.chunkstories.graphics.vulkan.graph.VulkanRenderTaskInstance import xyz.chunkstories.graphics.vulkan.memory.MemoryUsagePattern import xyz.chunkstories.graphics.vulkan.resources.VulkanShaderResourcesContext import xyz.chunkstories.graphics.vulkan.swapchain.VulkanFrame -import xyz.chunkstories.graphics.vulkan.systems.VulkanDispatchingSystem +import xyz.chunkstories.graphics.vulkan.systems.dispatching.VulkanDispatchingSystem import xyz.chunkstories.graphics.vulkan.vertexInputConfiguration class VulkanDefferedLightsDispatcher(backend: VulkanGraphicsBackend) : VulkanDispatchingSystem(backend) { diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/models/VulkanLinesDispatcher.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/lines/VulkanLinesDispatcher.kt similarity index 97% rename from client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/models/VulkanLinesDispatcher.kt rename to client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/lines/VulkanLinesDispatcher.kt index b66b8b51..7f12f63a 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/models/VulkanLinesDispatcher.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/lines/VulkanLinesDispatcher.kt @@ -1,11 +1,10 @@ -package xyz.chunkstories.graphics.vulkan.systems.models +package xyz.chunkstories.graphics.vulkan.systems.dispatching.lines import org.lwjgl.system.MemoryStack import org.lwjgl.system.MemoryUtil.memAlloc import org.lwjgl.system.MemoryUtil.memFree import org.lwjgl.vulkan.VK10 import org.lwjgl.vulkan.VK10.* -import org.lwjgl.vulkan.VkCommandBuffer import xyz.chunkstories.api.graphics.representation.Line import xyz.chunkstories.api.graphics.systems.dispatching.LinesRenderer import xyz.chunkstories.graphics.common.FaceCullingMode @@ -20,7 +19,7 @@ import xyz.chunkstories.graphics.vulkan.graph.VulkanPassInstance import xyz.chunkstories.graphics.vulkan.graph.VulkanRenderTaskInstance import xyz.chunkstories.graphics.vulkan.memory.MemoryUsagePattern import xyz.chunkstories.graphics.vulkan.swapchain.VulkanFrame -import xyz.chunkstories.graphics.vulkan.systems.VulkanDispatchingSystem +import xyz.chunkstories.graphics.vulkan.systems.dispatching.VulkanDispatchingSystem import xyz.chunkstories.graphics.vulkan.vertexInputConfiguration class VulkanLinesDispatcher(backend: VulkanGraphicsBackend) : VulkanDispatchingSystem(backend) { diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/models/VulkanModelsDispatcher.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/models/VulkanModelsDispatcher.kt similarity index 98% rename from client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/models/VulkanModelsDispatcher.kt rename to client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/models/VulkanModelsDispatcher.kt index c271de17..b9b36e02 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/models/VulkanModelsDispatcher.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/models/VulkanModelsDispatcher.kt @@ -1,13 +1,10 @@ -package xyz.chunkstories.graphics.vulkan.systems.models +package xyz.chunkstories.graphics.vulkan.systems.dispatching.models import org.lwjgl.system.MemoryStack import org.lwjgl.system.MemoryStack.stackLongs import org.lwjgl.system.MemoryStack.stackPush import org.lwjgl.system.MemoryUtil import org.lwjgl.vulkan.VK10.* -import org.lwjgl.vulkan.VkCommandBuffer -import org.lwjgl.vulkan.VkCommandBufferBeginInfo -import org.lwjgl.vulkan.VkCommandBufferInheritanceInfo import xyz.chunkstories.api.graphics.Mesh import xyz.chunkstories.api.graphics.MeshMaterial import xyz.chunkstories.api.graphics.representation.ModelInstance @@ -33,7 +30,7 @@ import xyz.chunkstories.graphics.vulkan.memory.MemoryUsagePattern import xyz.chunkstories.graphics.vulkan.resources.VulkanShaderResourcesContext import xyz.chunkstories.graphics.vulkan.shaders.VulkanShaderProgram import xyz.chunkstories.graphics.vulkan.swapchain.VulkanFrame -import xyz.chunkstories.graphics.vulkan.systems.VulkanDispatchingSystem +import xyz.chunkstories.graphics.vulkan.systems.dispatching.VulkanDispatchingSystem import xyz.chunkstories.graphics.vulkan.textures.VulkanSampler import xyz.chunkstories.graphics.vulkan.util.getVulkanFormat import java.util.concurrent.ConcurrentHashMap diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/models/VulkanSpritesDispatcher.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/sprites/VulkanSpritesDispatcher.kt similarity index 97% rename from client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/models/VulkanSpritesDispatcher.kt rename to client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/sprites/VulkanSpritesDispatcher.kt index 25735f78..fecf2314 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/models/VulkanSpritesDispatcher.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/dispatching/sprites/VulkanSpritesDispatcher.kt @@ -1,12 +1,9 @@ -package xyz.chunkstories.graphics.vulkan.systems.models +package xyz.chunkstories.graphics.vulkan.systems.dispatching.sprites import org.lwjgl.system.MemoryStack.* import org.lwjgl.system.MemoryUtil import org.lwjgl.system.MemoryUtil.memFree import org.lwjgl.vulkan.VK10.* -import org.lwjgl.vulkan.VkCommandBuffer -import org.lwjgl.vulkan.VkCommandBufferBeginInfo -import org.lwjgl.vulkan.VkCommandBufferInheritanceInfo import xyz.chunkstories.api.graphics.MeshMaterial import xyz.chunkstories.api.graphics.representation.Sprite import xyz.chunkstories.api.graphics.systems.dispatching.SpritesRenderer @@ -29,7 +26,7 @@ import xyz.chunkstories.graphics.vulkan.memory.MemoryUsagePattern import xyz.chunkstories.graphics.vulkan.resources.VulkanShaderResourcesContext import xyz.chunkstories.graphics.vulkan.shaders.VulkanShaderProgram import xyz.chunkstories.graphics.vulkan.swapchain.VulkanFrame -import xyz.chunkstories.graphics.vulkan.systems.VulkanDispatchingSystem +import xyz.chunkstories.graphics.vulkan.systems.dispatching.VulkanDispatchingSystem import xyz.chunkstories.graphics.vulkan.textures.VulkanSampler class VulkanSpritesDispatcher(backend: VulkanGraphicsBackend) : VulkanDispatchingSystem(backend) { diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/VulkanDrawingSystems.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/VulkanDrawingSystems.kt new file mode 100644 index 00000000..72e4271d --- /dev/null +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/VulkanDrawingSystems.kt @@ -0,0 +1,45 @@ +package xyz.chunkstories.graphics.vulkan.systems.drawing + +import xyz.chunkstories.api.graphics.systems.drawing.DrawingSystem +import xyz.chunkstories.graphics.vulkan.graph.VulkanPass +import xyz.chunkstories.graphics.common.Cleanable +import org.lwjgl.vulkan.VkCommandBuffer +import xyz.chunkstories.api.graphics.systems.RegisteredGraphicSystem +import xyz.chunkstories.api.graphics.systems.drawing.FarTerrainDrawer +import xyz.chunkstories.api.graphics.systems.drawing.FullscreenQuadDrawer +import xyz.chunkstories.api.gui.GuiDrawer +import xyz.chunkstories.graphics.vulkan.VulkanGraphicsBackend +import xyz.chunkstories.graphics.vulkan.graph.VulkanPassInstance +import xyz.chunkstories.graphics.vulkan.systems.drawing.dbgwireframe.VulkanDebugDrawer +import xyz.chunkstories.graphics.vulkan.systems.drawing.debugcube.VulkanSpinningCubeDrawer +import xyz.chunkstories.graphics.vulkan.systems.drawing.farterrain.VulkanFarTerrainRenderer +import xyz.chunkstories.graphics.vulkan.systems.drawing.fsquad.VulkanFullscreenQuadDrawer +import xyz.chunkstories.graphics.vulkan.systems.drawing.gui.VulkanGuiDrawer +import xyz.chunkstories.graphics.vulkan.systems.drawing.rt.Vulkan3DVoxelRaytracer + +/** Drawing systems are instanced per-declared pass for now */ +abstract class VulkanDrawingSystem(val pass: VulkanPass) : DrawingSystem, Cleanable { + + /** Registers drawing commands (pipeline bind, vertex buffer binds, draw calls etc */ + abstract fun registerDrawingCommands(context: VulkanPassInstance, commandBuffer: VkCommandBuffer) +} + +fun VulkanGraphicsBackend.createDrawingSystem(pass: VulkanPass, registration: RegisteredGraphicSystem): VulkanDrawingSystem? { + val dslCode = registration.dslCode as DrawingSystem.() -> Unit + + return when (registration.clazz) { + GuiDrawer::class.java -> VulkanGuiDrawer(pass, window.client.gui) + FullscreenQuadDrawer::class.java -> VulkanFullscreenQuadDrawer(pass, dslCode) + FarTerrainDrawer::class.java -> VulkanFarTerrainRenderer(pass, dslCode) + + Vulkan3DVoxelRaytracer::class.java -> Vulkan3DVoxelRaytracer(pass, dslCode) + VulkanSpinningCubeDrawer::class.java -> VulkanSpinningCubeDrawer(pass, dslCode) + VulkanDebugDrawer::class.java -> VulkanDebugDrawer(pass, dslCode, window.client.ingame!!) + + else -> { + //throw Exception("Unimplemented system on this backend: ${registration.clazz}") + VulkanGraphicsBackend.logger.error("Unimplemented system on this backend: ${registration.clazz}") + null + } + } +} \ No newline at end of file diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/debug/VulkanDebugDrawer.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/dbgwireframe/VulkanDebugDrawer.kt similarity index 96% rename from client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/debug/VulkanDebugDrawer.kt rename to client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/dbgwireframe/VulkanDebugDrawer.kt index a33679d9..ffe68ad1 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/debug/VulkanDebugDrawer.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/dbgwireframe/VulkanDebugDrawer.kt @@ -1,8 +1,6 @@ -package xyz.chunkstories.graphics.vulkan.systems.debug +package xyz.chunkstories.graphics.vulkan.systems.drawing.dbgwireframe import xyz.chunkstories.api.client.IngameClient -import xyz.chunkstories.api.entity.traits.serializable.TraitControllable -import xyz.chunkstories.api.graphics.structs.Camera import xyz.chunkstories.client.InternalClientOptions import xyz.chunkstories.client.ingame.LocalPlayerImplementation import xyz.chunkstories.graphics.common.FaceCullingMode @@ -12,7 +10,7 @@ import xyz.chunkstories.graphics.vulkan.VulkanGraphicsBackend import xyz.chunkstories.graphics.vulkan.buffers.VulkanVertexBuffer import xyz.chunkstories.graphics.vulkan.graph.VulkanPass import xyz.chunkstories.graphics.vulkan.resources.InflightFrameResource -import xyz.chunkstories.graphics.vulkan.systems.VulkanDrawingSystem +import xyz.chunkstories.graphics.vulkan.systems.drawing.VulkanDrawingSystem import xyz.chunkstories.graphics.vulkan.vertexInputConfiguration import org.joml.Vector3d import org.lwjgl.system.MemoryStack.* diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/debug/VulkanSpinningCubeDrawer.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/debugcube/VulkanSpinningCubeDrawer.kt similarity index 97% rename from client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/debug/VulkanSpinningCubeDrawer.kt rename to client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/debugcube/VulkanSpinningCubeDrawer.kt index a520179c..89ad40c3 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/debug/VulkanSpinningCubeDrawer.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/debugcube/VulkanSpinningCubeDrawer.kt @@ -1,7 +1,6 @@ -package xyz.chunkstories.graphics.vulkan.systems.debug +package xyz.chunkstories.graphics.vulkan.systems.drawing.debugcube import xyz.chunkstories.api.graphics.structs.Camera -import xyz.chunkstories.api.voxel.VoxelSide import xyz.chunkstories.graphics.common.FaceCullingMode import xyz.chunkstories.graphics.common.Primitive import xyz.chunkstories.graphics.vulkan.Pipeline @@ -18,7 +17,7 @@ import org.lwjgl.vulkan.VK10.* import xyz.chunkstories.api.util.kotlin.toVec3f import xyz.chunkstories.graphics.vulkan.graph.VulkanPassInstance import xyz.chunkstories.graphics.vulkan.memory.MemoryUsagePattern -import xyz.chunkstories.graphics.vulkan.systems.VulkanDrawingSystem +import xyz.chunkstories.graphics.vulkan.systems.drawing.VulkanDrawingSystem class VulkanSpinningCubeDrawer(pass: VulkanPass, dslCode: VulkanSpinningCubeDrawer.() -> Unit) : VulkanDrawingSystem(pass) { val backend: VulkanGraphicsBackend diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/farterrain/FarTerrainTextureManager.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/farterrain/FarTerrainTextureManager.kt similarity index 99% rename from client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/farterrain/FarTerrainTextureManager.kt rename to client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/farterrain/FarTerrainTextureManager.kt index c678dc2b..fc529a6f 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/farterrain/FarTerrainTextureManager.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/farterrain/FarTerrainTextureManager.kt @@ -1,4 +1,4 @@ -package xyz.chunkstories.graphics.vulkan.systems.world.farterrain +package xyz.chunkstories.graphics.vulkan.systems.drawing.farterrain import org.lwjgl.system.MemoryStack.stackPop import org.lwjgl.system.MemoryStack.stackPush diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/farterrain/VulkanFarTerrainRenderer.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/farterrain/VulkanFarTerrainRenderer.kt similarity index 96% rename from client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/farterrain/VulkanFarTerrainRenderer.kt rename to client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/farterrain/VulkanFarTerrainRenderer.kt index e6d377f7..64fa8d18 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/farterrain/VulkanFarTerrainRenderer.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/farterrain/VulkanFarTerrainRenderer.kt @@ -1,4 +1,4 @@ -package xyz.chunkstories.graphics.vulkan.systems.world.farterrain +package xyz.chunkstories.graphics.vulkan.systems.drawing.farterrain import org.joml.Vector2i import org.lwjgl.system.MemoryUtil.memAlloc @@ -21,8 +21,7 @@ import xyz.chunkstories.graphics.vulkan.graph.VulkanPassInstance import xyz.chunkstories.graphics.vulkan.memory.MemoryUsagePattern import xyz.chunkstories.graphics.vulkan.resources.InflightFrameResource import xyz.chunkstories.graphics.vulkan.shaders.VulkanShaderProgram -import xyz.chunkstories.graphics.vulkan.swapchain.VulkanFrame -import xyz.chunkstories.graphics.vulkan.systems.VulkanDrawingSystem +import xyz.chunkstories.graphics.vulkan.systems.drawing.VulkanDrawingSystem import xyz.chunkstories.graphics.vulkan.textures.VulkanSampler import xyz.chunkstories.graphics.vulkan.vertexInputConfiguration import xyz.chunkstories.world.WorldClientCommon diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/VulkanFullscreenQuadDrawer.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/fsquad/VulkanFullscreenQuadDrawer.kt similarity index 95% rename from client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/VulkanFullscreenQuadDrawer.kt rename to client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/fsquad/VulkanFullscreenQuadDrawer.kt index b6c12110..1d55f1f8 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/VulkanFullscreenQuadDrawer.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/fsquad/VulkanFullscreenQuadDrawer.kt @@ -1,4 +1,4 @@ -package xyz.chunkstories.graphics.vulkan.systems +package xyz.chunkstories.graphics.vulkan.systems.drawing.fsquad import org.lwjgl.system.MemoryStack.* import org.lwjgl.vulkan.VK10.* @@ -14,7 +14,7 @@ import xyz.chunkstories.graphics.vulkan.graph.VulkanPass import xyz.chunkstories.graphics.vulkan.graph.VulkanPassInstance import xyz.chunkstories.graphics.vulkan.memory.MemoryUsagePattern import xyz.chunkstories.graphics.vulkan.shaders.VulkanShaderProgram -import xyz.chunkstories.graphics.vulkan.swapchain.VulkanFrame +import xyz.chunkstories.graphics.vulkan.systems.drawing.VulkanDrawingSystem import xyz.chunkstories.graphics.vulkan.vertexInputConfiguration class VulkanFullscreenQuadDrawer(pass: VulkanPass, dslCode: FullscreenQuadDrawer.() -> Unit) : VulkanDrawingSystem(pass), FullscreenQuadDrawer { diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/gui/VulkanFontRenderer.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/gui/VulkanFontRenderer.kt similarity index 98% rename from client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/gui/VulkanFontRenderer.kt rename to client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/gui/VulkanFontRenderer.kt index 49940031..10704129 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/gui/VulkanFontRenderer.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/gui/VulkanFontRenderer.kt @@ -1,4 +1,4 @@ -package xyz.chunkstories.graphics.vulkan.systems.gui +package xyz.chunkstories.graphics.vulkan.systems.drawing.gui // // This file is a part of the Chunk Stories Implementation codebase diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/gui/VulkanGuiDrawer.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/gui/VulkanGuiDrawer.kt similarity index 99% rename from client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/gui/VulkanGuiDrawer.kt rename to client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/gui/VulkanGuiDrawer.kt index e6ef1848..a80f46c1 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/gui/VulkanGuiDrawer.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/gui/VulkanGuiDrawer.kt @@ -1,4 +1,4 @@ -package xyz.chunkstories.graphics.vulkan.systems.gui +package xyz.chunkstories.graphics.vulkan.systems.drawing.gui import org.joml.Vector4f import org.joml.Vector4fc @@ -23,7 +23,7 @@ import xyz.chunkstories.graphics.vulkan.graph.VulkanPassInstance import xyz.chunkstories.graphics.vulkan.memory.MemoryUsagePattern import xyz.chunkstories.graphics.vulkan.resources.InflightFrameResource import xyz.chunkstories.graphics.vulkan.resources.VulkanShaderResourcesContext -import xyz.chunkstories.graphics.vulkan.systems.VulkanDrawingSystem +import xyz.chunkstories.graphics.vulkan.systems.drawing.VulkanDrawingSystem import xyz.chunkstories.graphics.vulkan.textures.VulkanSampler import xyz.chunkstories.graphics.vulkan.textures.VulkanTexture2D import xyz.chunkstories.graphics.vulkan.vertexInputConfiguration diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/Vulkan3DVoxelRaytracer.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/rt/Vulkan3DVoxelRaytracer.kt similarity index 94% rename from client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/Vulkan3DVoxelRaytracer.kt rename to client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/rt/Vulkan3DVoxelRaytracer.kt index a4c7ded4..c52a9675 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/Vulkan3DVoxelRaytracer.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/rt/Vulkan3DVoxelRaytracer.kt @@ -1,4 +1,4 @@ -package xyz.chunkstories.graphics.vulkan.systems +package xyz.chunkstories.graphics.vulkan.systems.drawing.rt import org.lwjgl.system.MemoryStack import org.lwjgl.vulkan.VK10.* @@ -12,9 +12,8 @@ import xyz.chunkstories.graphics.vulkan.VulkanGraphicsBackend import xyz.chunkstories.graphics.vulkan.buffers.VulkanVertexBuffer import xyz.chunkstories.graphics.vulkan.graph.VulkanPass import xyz.chunkstories.graphics.vulkan.memory.MemoryUsagePattern -import xyz.chunkstories.graphics.vulkan.swapchain.VulkanFrame -import xyz.chunkstories.graphics.vulkan.systems.world.VulkanWorldVolumetricTexture import xyz.chunkstories.graphics.vulkan.graph.VulkanPassInstance +import xyz.chunkstories.graphics.vulkan.systems.drawing.VulkanDrawingSystem import xyz.chunkstories.graphics.vulkan.textures.VulkanSampler import xyz.chunkstories.graphics.vulkan.vertexInputConfiguration import xyz.chunkstories.world.WorldClientCommon diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/VulkanWorldVolumetricTexture.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/rt/VulkanWorldVolumetricTexture.kt similarity index 99% rename from client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/VulkanWorldVolumetricTexture.kt rename to client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/rt/VulkanWorldVolumetricTexture.kt index 7754596e..6e440ff3 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/world/VulkanWorldVolumetricTexture.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/systems/drawing/rt/VulkanWorldVolumetricTexture.kt @@ -1,4 +1,4 @@ -package xyz.chunkstories.graphics.vulkan.systems.world +package xyz.chunkstories.graphics.vulkan.systems.drawing.rt import org.joml.Vector3dc import org.joml.Vector3i diff --git a/client/src/main/java/xyz/chunkstories/graphics/vulkan/world/VulkanWorldRenderer.kt b/client/src/main/java/xyz/chunkstories/graphics/vulkan/world/VulkanWorldRenderer.kt index 0eaae6d4..d7fef08e 100644 --- a/client/src/main/java/xyz/chunkstories/graphics/vulkan/world/VulkanWorldRenderer.kt +++ b/client/src/main/java/xyz/chunkstories/graphics/vulkan/world/VulkanWorldRenderer.kt @@ -3,7 +3,7 @@ package xyz.chunkstories.graphics.vulkan.world import xyz.chunkstories.graphics.common.WorldRenderer import xyz.chunkstories.graphics.common.world.EntitiesRepresentationsProvider import xyz.chunkstories.graphics.vulkan.VulkanGraphicsBackend -import xyz.chunkstories.graphics.vulkan.systems.world.VulkanChunkRepresentationsProvider +import xyz.chunkstories.graphics.vulkan.systems.dispatching.chunks.VulkanChunkRepresentationsProvider import xyz.chunkstories.world.WorldClientCommon class VulkanWorldRenderer(override val backend: VulkanGraphicsBackend, world: WorldClientCommon) : WorldRenderer(world) { diff --git a/client/src/main/resources/shaders/blur_horizontal/blur_horizontal.vert b/client/src/main/resources/shaders/blur_horizontal/blur_horizontal.vert index b28a0029..3b41a5c2 100644 --- a/client/src/main/resources/shaders/blur_horizontal/blur_horizontal.vert +++ b/client/src/main/resources/shaders/blur_horizontal/blur_horizontal.vert @@ -1,6 +1,6 @@ #version 330 -#include struct xyz.chunkstories.graphics.vulkan.systems.world.ViewportSize +#include struct xyz.chunkstories.graphics.common.structs.ViewportSize uniform ViewportSize viewportSize; in vec2 vertexIn; diff --git a/client/src/main/resources/shaders/blur_vertical/blur_vertical.vert b/client/src/main/resources/shaders/blur_vertical/blur_vertical.vert index 91acad71..86f512c2 100644 --- a/client/src/main/resources/shaders/blur_vertical/blur_vertical.vert +++ b/client/src/main/resources/shaders/blur_vertical/blur_vertical.vert @@ -1,6 +1,6 @@ #version 330 -#include struct xyz.chunkstories.graphics.vulkan.systems.world.ViewportSize +#include struct xyz.chunkstories.graphics.common.structs.ViewportSize uniform ViewportSize viewportSize; in vec2 vertexIn;