From 3e886e5ba86a6b7bacc5efe04bbc2ba6d53de94e Mon Sep 17 00:00:00 2001 From: Halbear Date: Thu, 20 Aug 2026 03:03:03 +0100 Subject: [PATCH] 2D Sprite Renderer and sprite framework, Began additional OpenGL Renderer, started transitioning multiplayer networking to use Java NIO --- build.gradle | 90 +- hs_err_pid8656.log | 2912 ----------------- .../EngineResources/GLShaders/scene_frag.glsl | 9 + .../EngineResources/GLShaders/scene_vert.glsl | 12 + .../SpriteShaders/sprite_fragment.glsl | 2 +- .../sprite_translucent_fragment.glsl | 2 +- .../SpriteShaders/sprite_vertex.glsl | 4 +- .../java/net/halbear/Executable/Init.java | 3 +- .../java/net/halbear/Executable/Launcher.java | 49 + .../java/net/halbear/Executable/Server.java | 203 +- .../EngineCore/Display/GLFWImageParser.java | 3 +- .../EngineCore/Display/OpenGLRenderer.java | 161 + .../EngineCore/Display/Renderer.java | 63 + .../{Render.java => VulkanRenderer.java} | 43 +- .../Terrain4J/EngineCore/Display/Window.java | 119 +- .../EngineCore/Input/KeyboardInput.java | 10 + .../EngineCore/Logic/EngineConfig.java | 95 +- .../EngineCore/Logic/EngineInstance.java | 10 +- .../Terrain4J/EngineCore/Logic/InitData.java | 6 +- .../Logic/Physics/CollisionSensor.java | 38 - .../Logic/Physics/IPhysicsController.java | 2 - .../LegacyCollision/CollisionIndexPoly.java | 18 - .../LegacyCollision/CollisionManager.java | 87 - .../LegacyCollision/CollisionMesh.java | 285 -- .../LegacyCollision/CollisionPoly.java | 76 - .../Physics/LegacyPhysicsController.java | 343 -- .../Logic/Physics/RigidBody/ConvexMesh.java | 2 +- .../Logic/Physics/RigidBody/RigidBody.java | 1 - .../RigidBody/RigidPhysicsController.java | 18 +- .../Logic/Physics/WorldPhysicsManager.java | 15 +- .../Logic/Rendering/ModelCompiler.java | 10 +- .../Logic/Rendering/ModelLoader.java | 8 +- .../Logic/Rendering/VulkanContext.java | 16 +- .../Terrain4J/EngineCore/Main/GameCore.java | 124 +- .../EngineCore/Main/PrimaryRuntime.java | 147 +- .../EngineCore/Main/Scene/Actor.java | 22 +- .../EngineCore/Main/Scene/ActorElement.java | 13 +- .../EngineCore/Main/Scene/Camera2D.java | 21 +- .../Main/Scene/EditorActorComponent.java | 5 - .../Main/Scene/GUIs/CreditsMenu.java | 9 - .../EngineCore/Main/Scene/GUIs/GameChat.java | 72 + .../EngineCore/Main/Scene/GUIs/Gimbal.java | 63 +- .../Main/Scene/GUIs/LoadingScreen.java | 8 +- .../Main/Scene/GUIs/PerformanceOverlay.java | 26 +- .../Main/Scene/GUIs/SettingsMenu.java | 74 +- .../EngineCore/Main/Scene/GUIs/StartMenu.java | 9 - .../EngineCore/Main/Scene/IScene.java | 12 +- .../EngineCore/Main/Scene/PlayerActor.java | 13 +- .../EngineCore/Main/Scene/Scene.java | 205 +- .../EngineCore/Main/Scene/Scene2D.java | 234 ++ .../EngineCore/Main/Scene/Sprite.java | 117 +- .../EngineCore/Main/Scene/SpriteVk.java | 131 + .../Main/Scene/Sprites/LevelEntities.java | 22 + .../Main/Scene/Sprites/LimitlessTileMap.java | 36 + .../Main/Scene/Sprites/SpriteCollection.java | 38 + .../Main/Scene/Sprites/SpriteLayer.java | 32 + .../Main/Scene/Sprites/SpriteState.java | 4 + .../Main/Scene/Sprites/Tilemap.java | 68 + .../Main/Scene/VisualisedCollisionActor.java | 4 +- .../EngineCore/Main/Util/Maths/T4Math.java | 101 - .../EngineCore/Profiling/GPUProfiler.java | 5 +- .../RenderingAPI/OpenGL/GlModels/GLMesh.java | 73 + .../RenderingAPI/OpenGL/GlModels/GLModel.java | 8 + .../OpenGL/GlModels/ModelsCache.java | 23 + .../RenderingAPI/OpenGL/OpenGlUtils.java | 21 + .../OpenGL/Rendering/ForwardRenderer.java | 52 + .../OpenGL/Rendering/SceneRender.java | 9 + .../OpenGL/Shader/ShaderModuleGL.java | 4 + .../OpenGL/Shader/ShaderProgram.java | 76 + .../Vulkan/GUI/GuiRenderer.java | 29 +- .../Vulkan/GUI/GuiTexture.java | 2 +- .../Vulkan/GUI/GuiUtils.java | 12 +- .../Vulkan/GUI/GuiVertexBufferStruct.java | 4 +- .../DeferredRendering/LightRenderer.java | 29 +- .../MultiRenderTargetAttachments.java | 4 +- .../DynamicMesh/DeferredResource.java | 2 +- .../DynamicMesh/DynamicTerrainMesh.java | 9 +- .../Rendering/EmptyVertexBufferStruct.java | 2 +- .../Rendering/Pipeline/DefaultPipeline.java | 12 +- .../Vulkan/Rendering/Pipeline/GraphUtils.java | 9 +- .../Rendering/Pipeline/Images/Attachment.java | 5 +- .../Pipeline/Images/CubeMapTexture.java | 12 +- .../Rendering/Pipeline/Images/ITexture.java | 6 +- .../Rendering/Pipeline/Images/Image.java | 8 +- .../Rendering/Pipeline/Images/ImageSrc.java | 2 +- .../Rendering/Pipeline/Images/Texture.java | 11 +- .../Pipeline/Images/TextureCache.java | 13 +- .../Pipeline/IndexedLinkedHashMap.java | 3 +- .../Vulkan/Rendering/Pipeline/Pipeline.java | 2 +- .../Rendering/Pipeline/PipelineBuildInfo.java | 8 +- .../Rendering/Pipeline/PipelineCache.java | 6 +- .../Pipeline/PushConstantsRange.java | 4 + .../Rendering/PostProcessing/PostProcess.java | 26 +- .../SpecializationConstants.java | 4 +- .../Rendering/Projection/Project3D.java | 2 +- .../Rendering/Shader/DescriptorAllocator.java | 7 +- .../Rendering/Shader/DescriptorPool.java | 6 +- .../Rendering/Shader/DescriptorSet.java | 10 +- .../Rendering/Shader/DescriptorSetLayout.java | 4 +- .../Rendering/Shader/ShaderCompiler.java | 2 +- .../Vulkan/Rendering/Shader/ShaderModule.java | 4 +- .../Rendering/Shader/TextureSampler.java | 4 +- .../Rendering/Shader/TextureSamplerInfo.java | 2 +- .../Vulkan/Rendering/Shadows/CascadeData.java | 2 +- .../Rendering/Shadows/CascadeShadows.java | 2 +- .../Rendering/Shadows/ShadowRenderer.java | 4 +- .../Vulkan/Rendering/Shadows/ShadowUtils.java | 5 +- .../TerrainMeshVertexBufferStructure.java | 5 +- .../Rendering/VertexBufferStructure.java | 4 +- .../Rendering/VkModel/MaterialData.java | 2 +- .../Rendering/VkModel/MaterialsCache.java | 23 +- .../Vulkan/Rendering/VkModel/MeshData.java | 2 +- .../Rendering/VkModel/ModelBinaryData.java | 2 +- .../Vulkan/Rendering/VkModel/ModelData.java | 2 +- .../Vulkan/Rendering/VkModel/ModelsCache.java | 21 +- .../Rendering/VkModel/VulkanMaterial.java | 4 + .../Vulkan/Rendering/VkModel/VulkanMesh.java | 4 +- .../Vulkan/Rendering/VkModel/VulkanModel.java | 2 +- .../BillboardMeshGenerator.java | 2 +- .../SpriteRendering/SpriteMeshGenerator.java | 6 +- .../SpriteRendering/SpriteRenderer.java | 51 +- .../SpriteVertexBufferStructure.java | 4 +- .../SpriteRendering/TextureAlphaBounds.java | 2 +- .../Structure/DeviceLayers/CommandBuffer.java | 8 +- .../Structure/DeviceLayers/CommandPool.java | 4 +- .../Vulkan/Structure/DeviceLayers/Device.java | 11 +- .../GPUSynchronisation/Fence.java | 4 +- .../GPUSynchronisation/Semaphore.java | 4 +- .../GPUSynchronisation/TransferBuffer.java | 6 +- .../DeviceLayers/PhysicalDevice.java | 6 +- .../Structure/DeviceLayers/Queues/Queue.java | 6 +- .../DisplayToScreen/DeferredSceneRender.java | 34 +- .../DisplayToScreen/ForwardSceneRender.java | 32 +- .../Structure/DisplayToScreen/ImageView.java | 8 +- .../DisplayToScreen/SceneRenderer.java | 21 + .../Structure/DisplayToScreen/Surface.java | 9 +- .../Vulkan/Structure/SwapChain/SwapChain.java | 14 +- .../Structure/SwapChain/SwapChainRender.java | 20 +- .../Vulkan/Structure/VulkanInstance.java | 6 +- .../Vulkan/Util/VulkanBuffer.java | 10 +- .../Vulkan/Util/VulkanMemoryAllocator.java | 10 +- .../Vulkan/Util/VulkanUtils.java | 12 +- .../ServerNetworking/ClientSession.java | 311 ++ .../ClientSideNetworkUtils.java | 460 +++ .../EngineCore/ServerNetworking/GameChat.java | 7 + .../ServerNetworking/IP_MODIFIER.java | 11 + .../ServerNetworking/NetworkingUtil.java | 20 + .../EngineCore/ServerNetworking/Packet.java | 101 +- .../ServerNetworking/ServerConnection.java | 18 + .../ServerSideNetworkUtils.java | 371 +++ .../Threads/ClientConnectionThread.java | 406 +-- .../EngineCore/Threads/EngineThread.java | 9 +- .../EngineCore/Threads/IEngineThread.java | 23 + .../Threads/InstancedPhysicsThread.java | 18 +- .../Threads/NIO_ClientConnectionThread.java | 40 + .../EngineCore/Threads/RenderThread.java | 73 +- .../Threads/ServerConnectionThread.java | 315 +- .../ServerMultiClientConnectionThread.java | 145 + .../Threads/ServerSelectorMasterThread.java | 87 + .../Threads/VirtualEngineThread.java | 155 + .../Pipeline/PushConstantsRange.java | 4 - .../Rendering/VkModel/VulkanMaterial.java | 4 - .../DisplayToScreen/SceneRenderer.java | 27 - .../resources/DefaultEngineConfig.properties | 26 +- terrain4j.properties | 79 +- 165 files changed, 4460 insertions(+), 5485 deletions(-) delete mode 100644 hs_err_pid8656.log create mode 100644 resources/EngineResources/GLShaders/scene_frag.glsl create mode 100644 resources/EngineResources/GLShaders/scene_vert.glsl create mode 100644 src/main/java/net/halbear/Executable/Launcher.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Display/OpenGLRenderer.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Display/Renderer.java rename src/main/java/net/halbear/Terrain4J/EngineCore/Display/{Render.java => VulkanRenderer.java} (88%) delete mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/CollisionSensor.java delete mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/LegacyCollision/CollisionIndexPoly.java delete mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/LegacyCollision/CollisionManager.java delete mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/LegacyCollision/CollisionMesh.java delete mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/LegacyCollision/CollisionPoly.java delete mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/LegacyPhysicsController.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/GameChat.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Scene2D.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/SpriteVk.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/LevelEntities.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/LimitlessTileMap.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/SpriteCollection.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/SpriteLayer.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/SpriteState.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/Tilemap.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/GlModels/GLMesh.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/GlModels/GLModel.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/GlModels/ModelsCache.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/OpenGlUtils.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/Rendering/ForwardRenderer.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/Rendering/SceneRender.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/Shader/ShaderModuleGL.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/Shader/ShaderProgram.java rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/GUI/GuiRenderer.java (92%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/GUI/GuiTexture.java (85%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/GUI/GuiUtils.java (92%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/GUI/GuiVertexBufferStruct.java (94%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/DeferredRendering/LightRenderer.java (92%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/DeferredRendering/MultiRenderTargetAttachments.java (93%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/DynamicMesh/DeferredResource.java (80%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/DynamicMesh/DynamicTerrainMesh.java (93%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/EmptyVertexBufferStruct.java (88%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Pipeline/DefaultPipeline.java (96%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Pipeline/GraphUtils.java (79%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Pipeline/Images/Attachment.java (87%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Pipeline/Images/CubeMapTexture.java (93%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Pipeline/Images/ITexture.java (70%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Pipeline/Images/Image.java (92%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Pipeline/Images/ImageSrc.java (55%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Pipeline/Images/Texture.java (95%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Pipeline/Images/TextureCache.java (89%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Pipeline/IndexedLinkedHashMap.java (88%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Pipeline/Pipeline.java (73%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Pipeline/PipelineBuildInfo.java (89%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Pipeline/PipelineCache.java (82%) create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/PushConstantsRange.java rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/PostProcessing/PostProcess.java (91%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/PostProcessing/SpecializationConstants.java (88%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Projection/Project3D.java (94%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Shader/DescriptorAllocator.java (95%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Shader/DescriptorPool.java (90%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Shader/DescriptorSet.java (93%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Shader/DescriptorSetLayout.java (93%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Shader/ShaderCompiler.java (97%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Shader/ShaderModule.java (93%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Shader/TextureSampler.java (92%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Shader/TextureSamplerInfo.java (57%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Shadows/CascadeData.java (87%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Shadows/CascadeShadows.java (86%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Shadows/ShadowRenderer.java (88%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/Shadows/ShadowUtils.java (97%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/TerrainMeshVertexBufferStructure.java (92%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/VertexBufferStructure.java (96%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/VkModel/MaterialData.java (71%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/VkModel/MaterialsCache.java (85%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/VkModel/MeshData.java (60%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/VkModel/ModelBinaryData.java (96%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/VkModel/ModelData.java (61%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/VkModel/ModelsCache.java (90%) create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/VulkanMaterial.java rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/VkModel/VulkanMesh.java (67%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Rendering/VkModel/VulkanModel.java (87%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/SpriteRendering/BillboardMeshGenerator.java (95%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/SpriteRendering/SpriteMeshGenerator.java (92%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/SpriteRendering/SpriteRenderer.java (87%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/SpriteRendering/SpriteVertexBufferStructure.java (94%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/SpriteRendering/TextureAlphaBounds.java (95%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Structure/DeviceLayers/CommandBuffer.java (92%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Structure/DeviceLayers/CommandPool.java (89%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Structure/DeviceLayers/Device.java (92%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Structure/DeviceLayers/GPUSynchronisation/Fence.java (89%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Structure/DeviceLayers/GPUSynchronisation/Semaphore.java (85%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Structure/DeviceLayers/GPUSynchronisation/TransferBuffer.java (69%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Structure/DeviceLayers/PhysicalDevice.java (96%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Structure/DeviceLayers/Queues/Queue.java (93%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Structure/DisplayToScreen/DeferredSceneRender.java (95%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Structure/DisplayToScreen/ForwardSceneRender.java (95%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Structure/DisplayToScreen/ImageView.java (90%) create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DisplayToScreen/SceneRenderer.java rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Structure/DisplayToScreen/Surface.java (90%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Structure/SwapChain/SwapChain.java (91%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Structure/SwapChain/SwapChainRender.java (92%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Structure/VulkanInstance.java (97%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Util/VulkanBuffer.java (88%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Util/VulkanMemoryAllocator.java (77%) rename src/main/java/net/halbear/Terrain4J/EngineCore/{ => RenderingAPI}/Vulkan/Util/VulkanUtils.java (96%) create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/ClientSession.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/ClientSideNetworkUtils.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/GameChat.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/IP_MODIFIER.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/NetworkingUtil.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/ServerConnection.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/ServerSideNetworkUtils.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Threads/IEngineThread.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Threads/NIO_ClientConnectionThread.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Threads/ServerMultiClientConnectionThread.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Threads/ServerSelectorMasterThread.java create mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Threads/VirtualEngineThread.java delete mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/PushConstantsRange.java delete mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/VulkanMaterial.java delete mode 100644 src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DisplayToScreen/SceneRenderer.java diff --git a/build.gradle b/build.gradle index 9a35c50..a154d98 100644 --- a/build.gradle +++ b/build.gradle @@ -5,14 +5,10 @@ buildscript { mavenCentral() gradlePluginPortal() } - dependencies { - classpath 'com.gradleup.shadow:shadow-gradle-plugin:8.3.5' - } } plugins { - id 'application' - id 'java' - id 'com.gradleup.shadow' version '8.3.5' + id 'application' + id 'java' } project.ext.lwjglVersion = "3.4.1" project.ext.jomlVersion = "1.10.8" @@ -22,43 +18,20 @@ project.ext.steamworks4jVersion = "1.9.0" project.ext.steamworks4jserverVersion = "1.9.0" project.ext.imguiVersion = "1.92.0" -switch (OperatingSystem.current()) { - case OperatingSystem.LINUX: - project.ext.lwjglNatives = "natives-linux" - def osArch = System.getProperty("os.arch") - if (osArch.startsWith("arm") || osArch.startsWith("aarch64")) { - project.ext.lwjglNatives += osArch.contains("64") || osArch.startsWith("armv8") ? "-arm64" : "-arm32" - } else if (osArch.startsWith("ppc")) { - project.ext.lwjglNatives += "-ppc64le" - } else if (osArch.startsWith("riscv")) { - project.ext.lwjglNatives += "-riscv64" - } - break - case OperatingSystem.MAC_OS: - project.ext.lwjglNatives = System.getProperty("os.arch").startsWith("aarch64") ? "natives-macos-arm64" : "natives-macos" - break - case OperatingSystem.WINDOWS: - def osArch = System.getProperty("os.arch") - project.ext.lwjglNatives = osArch.contains("64") - ? "natives-windows${osArch.startsWith("aarch64") ? "-arm64" : ""}" - : "natives-windows-x86" - break -} - - - repositories { mavenCentral() } application { - mainClass.set('net.halbear.Executable.Init') + mainClass.set('net.halbear.Executable.Launcher') } dependencies { implementation platform("org.lwjgl:lwjgl-bom:$lwjglVersion") implementation 'org.tinylog:tinylog-api:2.7.0' implementation 'org.tinylog:tinylog-impl:2.7.0' + + // Core LWJGL modules implementation "org.lwjgl:lwjgl" implementation "org.lwjgl:lwjgl-assimp" implementation "org.lwjgl:lwjgl-fmod" @@ -76,22 +49,29 @@ dependencies { implementation "org.lwjgl:lwjgl-stb" implementation "org.lwjgl:lwjgl-vma" implementation "org.lwjgl:lwjgl-vulkan" - implementation "org.lwjgl:lwjgl::$lwjglNatives" - implementation "org.lwjgl:lwjgl-assimp::$lwjglNatives" - implementation "org.lwjgl:lwjgl-freetype::$lwjglNatives" - implementation "org.lwjgl:lwjgl-glfw::$lwjglNatives" - implementation "org.lwjgl:lwjgl-jemalloc::$lwjglNatives" - implementation "org.lwjgl:lwjgl-llvm::$lwjglNatives" - implementation "org.lwjgl:lwjgl-lmdb::$lwjglNatives" - implementation "org.lwjgl:lwjgl-meshoptimizer::$lwjglNatives" - implementation "org.lwjgl:lwjgl-openal::$lwjglNatives" - implementation "org.lwjgl:lwjgl-rpmalloc::$lwjglNatives" implementation "org.lwjgl:lwjgl-remotery:${lwjglVersion}" - runtimeOnly "org.lwjgl:lwjgl-remotery:${lwjglVersion}:${lwjglNatives}" - implementation "org.lwjgl:lwjgl-shaderc::$lwjglNatives" - implementation "org.lwjgl:lwjgl-stb::$lwjglNatives" - implementation "org.lwjgl:lwjgl-vma::$lwjglNatives" - if (lwjglNatives == "natives-macos" || lwjglNatives == "natives-macos-arm64") implementation "org.lwjgl:lwjgl-vulkan::$lwjglNatives" + + // Define targeted native platforms explicitly + def targetNatives = ["natives-windows", "natives-linux"] + + // Loop through and bundle natives for both Windows and Linux + targetNatives.each { target -> + runtimeOnly "org.lwjgl:lwjgl::$target" + runtimeOnly "org.lwjgl:lwjgl-assimp::$target" + runtimeOnly "org.lwjgl:lwjgl-freetype::$target" + runtimeOnly "org.lwjgl:lwjgl-glfw::$target" + runtimeOnly "org.lwjgl:lwjgl-jemalloc::$target" + runtimeOnly "org.lwjgl:lwjgl-llvm::$target" + runtimeOnly "org.lwjgl:lwjgl-lmdb::$target" + runtimeOnly "org.lwjgl:lwjgl-meshoptimizer::$target" + runtimeOnly "org.lwjgl:lwjgl-openal::$target" + runtimeOnly "org.lwjgl:lwjgl-rpmalloc::$target" + runtimeOnly "org.lwjgl:lwjgl-remotery:${lwjglVersion}:$target" + runtimeOnly "org.lwjgl:lwjgl-shaderc::$target" + runtimeOnly "org.lwjgl:lwjgl-stb::$target" + runtimeOnly "org.lwjgl:lwjgl-vma::$target" + } + implementation "org.joml:joml:${jomlVersion}" implementation "org.joml:joml-primitives:${jomlprimitivesVersion}" implementation "org.lwjglx:lwjgl3-awt:${lwjgl3awtVersion}" @@ -99,20 +79,18 @@ dependencies { implementation "com.code-disaster.steamworks4j:steamworks4j-server:${steamworks4jserverVersion}" implementation 'com.google.code.gson:gson:2.14.0' implementation "org.jcommander:jcommander:3.0" + ['', '-opengl', '-glfw'].each { implementation "org.lwjgl:lwjgl$it:$lwjglVersion" - implementation "org.lwjgl:lwjgl$it::natives-windows" + runtimeOnly "org.lwjgl:lwjgl$it::natives-windows" + runtimeOnly "org.lwjgl:lwjgl$it::natives-linux" } + // ImGui Setup implementation "io.github.spair:imgui-java-binding:$imguiVersion" implementation "io.github.spair:imgui-java-lwjgl3:$imguiVersion" - implementation "io.github.spair:imgui-java-natives-windows:$imguiVersion" + // ImGui Natives for both OS environments + runtimeOnly "io.github.spair:imgui-java-natives-windows:$imguiVersion" + runtimeOnly "io.github.spair:imgui-java-natives-linux:$imguiVersion" } - -tasks.named('startShadowScripts') { - // Dynamically override the legacy property binding with the modern provider mapping - conventionMapping.map('mainClassName') { - application.mainClass.get() - } -} \ No newline at end of file diff --git a/hs_err_pid8656.log b/hs_err_pid8656.log deleted file mode 100644 index fcaef85..0000000 --- a/hs_err_pid8656.log +++ /dev/null @@ -1,2912 +0,0 @@ -# -# A fatal error has been detected by the Java Runtime Environment: -# -# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffe8a1990b0, pid=8656, tid=14748 -# -# JRE version: Java(TM) SE Runtime Environment Oracle GraalVM 25+37.1 (25.0+37) (build 25+37-LTS-jvmci-b01) -# Java VM: Java HotSpot(TM) 64-Bit Server VM Oracle GraalVM 25+37.1 (25+37-LTS-jvmci-b01, mixed mode, sharing, tiered, jvmci, jvmci compiler, compressed oops, compressed class ptrs, g1 gc, windows-amd64) -# Problematic frame: -# C [ntdll.dll+0x290b0] -# -# No core dump will be written. Minidumps are not enabled by default on client versions of Windows -# -# If you would like to submit a bug report, please visit: -# https://bugreport.java.com/bugreport/crash.jsp -# The crash happened outside the Java Virtual Machine in native code. -# See problematic frame for where to report the bug. -# - ---------------- S U M M A R Y ------------ - -Command Line: -XX:ThreadPriorityPolicy=1 -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCIProduct -XX:+EnableJVMCI -XX:-UnlockExperimentalVMOptions -Dfile.encoding=UTF-8 -Duser.country=GB -Duser.language=en -Duser.variant net.halbear.Executable.Init - -Host: Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz, 8 cores, 11G, Windows 10 , 64 bit Build 19041 (10.0.19041.7291) -Time: Mon Jun 29 14:10:24 2026 GMT Summer Time elapsed time: 19.906217 seconds (0d 0h 0m 19s) - ---------------- T H R E A D --------------- - -Current thread (0x000001816240f970): JavaThread "Terrain4J Render Engine Thread" [_thread_in_native, id=14748, stack(0x0000002dc9e00000,0x0000002dc9f00000) (1024K)] - -Stack: [0x0000002dc9e00000,0x0000002dc9f00000], sp=0x0000002dc9efe400, free space=1017k -Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) -C [ntdll.dll+0x290b0] (no source info available) -C [graphics-hook64.dll+0xc8bd] (no source info available) -C 0x000001815448a4a1 (no source info available) - -The last pc belongs to nep_invoker_blob (printed below). -Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) -v ~RuntimeStub::nep_invoker_blob 0x000001815448a468 -J 4232 c1 org.lwjgl.system.JNIBindingsImpl+0x000000000f070000.callPPI(Ljava/lang/foreign/MemorySegment;JJ)I (11 bytes) @ 0x000001814d85265c [0x000001814d850400+0x000000000000225c] -J 4231 c1 org.lwjgl.system.JNI.callPPI(JJJ)I (16 bytes) @ 0x000001814d84ea6c [0x000001814d84e580+0x00000000000004ec] -J 4545 c1 org.lwjgl.vulkan.KHRSwapchain.nvkQueuePresentKHR(Lorg/lwjgl/vulkan/VkQueue;J)I (33 bytes) @ 0x000001814dc7c05c [0x000001814dc7bd00+0x000000000000035c] -J 4528 c1 net.halbear.Terrain4J.EngineCore.Vulkan.Structure.SwapChain.SwapChain.PresentImage(Lnet/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/Queues/Queue;Lnet/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/GPUSynchronisation/Semaphore;I)Z (160 bytes) @ 0x000001814dc1636c [0x000001814dbf7b00+0x000000000001e86c] -J 4466 c1 net.halbear.Terrain4J.EngineCore.Display.Render.DeferredRender(Lnet/halbear/Terrain4J/EngineCore/Logic/EngineInstance;)V (260 bytes) @ 0x000001814dbe8e64 [0x000001814dbe8280+0x0000000000000be4] -J 4442 c1 net.halbear.Terrain4J.EngineCore.Threads.RenderThread.FrameEvent(JJ)V (26 bytes) @ 0x000001814db93a4c [0x000001814db93800+0x000000000000024c] -j net.halbear.Terrain4J.EngineCore.Threads.EngineThread.run()V+143 -j java.lang.Thread.runWith(Ljava/lang/Object;Ljava/lang/Runnable;)V+5 java.base@25 -j java.lang.Thread.run()V+19 java.base@25 -v ~StubRoutines::call_stub 0x00000181541112ed - -siginfo: EXCEPTION_ACCESS_VIOLATION (0xc0000005), writing address 0x0000000000000160 - - -Registers: -RAX=0x0000000000000001, RBX=0x00000181015187b8, RCX=0x0000000000000160, RDX=0x0000000000000000 -RSP=0x0000002dc9efe400, RBP=0x0000000000000000, RSI=0x0000000000000160, RDI=0x00800408c0200401 -R8 =0x00000181015187b8, R9 =0x000001812b3aefe0, R10=0x00007ffe4547c850, R11=0x000001812b3aefe0 -R12=0x0000000000000000, R13=0x0000018163bb1ad0, R14=0x000001812b3aefe0, R15=0x000001816240f970 -RIP=0x00007ffe8a1990b0, EFLAGS=0x0000000000010246 - -XMM[0]=0x0000002dc9eff120 0x0000010000000000 -XMM[1]=0x0000000000000000 0x0000002dc9efe3e0 -XMM[2]=0x2222222222222222 0x2222222222222222 -XMM[3]=0x8080808080808080 0x8080808080808080 -XMM[4]=0x0000000000000000 0x000001898fa01b08 -XMM[5]=0x0000000000000000 0x0000000000000000 -XMM[6]=0x0000000000000000 0xbf3a000000000000 -XMM[7]=0x0000000000000000 0x3d61700c7adb8645 -XMM[8]=0x0000000000000000 0x4022aee2c4332d5e -XMM[9]=0x0000000000000000 0x11aeaed5934f65be -XMM[10]=0x0000000000000000 0x0000000081a0b6e9 -XMM[11]=0x0000000000000000 0x67be6520fb0dcade -XMM[12]=0x0000000000000000 0x00000000934f65be -XMM[13]=0x0000000000000000 0x00000000beb62693 -XMM[14]=0x0000000000000000 0x00000000bf3c542c -XMM[15]=0x0000000000000000 0x0000000036f6d94a - MXCSR=0x00001fa0 - - -Register to memory mapping: - -RAX=0x0000000000000001 is an unknown value -RBX=0x00000181015187b8 points into unknown readable memory: 0x00800408c0200401 | 01 04 20 c0 08 04 80 00 -RCX=0x0000000000000160 is an unknown value -RDX=0x0 is null -RSP=0x0000002dc9efe400 is pointing into the stack for thread: 0x000001816240f970 -RBP=0x0 is null -RSI=0x0000000000000160 is an unknown value -RDI=0x00800408c0200401 is an unknown value -R8 =0x00000181015187b8 points into unknown readable memory: 0x00800408c0200401 | 01 04 20 c0 08 04 80 00 -R9 =0x000001812b3aefe0 points into unknown readable memory: 0x000000003b9acde9 | e9 cd 9a 3b 00 00 00 00 -R10=0x00007ffe4547c850 graphics-hook64.dll -R11=0x000001812b3aefe0 points into unknown readable memory: 0x000000003b9acde9 | e9 cd 9a 3b 00 00 00 00 -R12=0x0 is null -R13=0x0000018163bb1ad0 is pointing into metadata -R14=0x000001812b3aefe0 points into unknown readable memory: 0x000000003b9acde9 | e9 cd 9a 3b 00 00 00 00 -R15=0x000001816240f970 is a thread - -Top of Stack: (sp=0x0000002dc9efe400) -0x0000002dc9efe400: 0000000000000000 0000002dc9efe430 ........0...-... -0x0000002dc9efe410: 0000002dc9eff120 000001814d3926dc ...-....&9M.... -0x0000002dc9efe420: 000000074f8bf3e0 000001814d3926dc ...O.....&9M.... -0x0000002dc9efe430: 0000002dc9eff120 000000000e1954c0 ...-....T...... -0x0000002dc9efe440: 00000000e9952b36 00000000e9940153 6+......S....... -0x0000002dc9efe450: 0000000000000000 0000000000000000 ................ -0x0000002dc9efe460: 0000000000000000 00007ffe4547c8bd ..........GE.... -0x0000002dc9efe470: 0000100000000000 000001814da68409 ...........M.... -0x0000002dc9efe480: 0000002dc9eff120 000001814da6ab4c ...-...L..M.... -0x0000002dc9efe490: 0000002dc9efe370 000001815448a4a1 p...-.....HT.... -0x0000002dc9efe4a0: 00000181633013a8 0000002dc9efe4c0 ..0c........-... -0x0000002dc9efe4b0: 000000074ca959b0 000000074cb6aa48 .Y.L....H..L.... -0x0000002dc9efe4c0: 0000002dc9eff120 000001814d85265c ...-...\&.M.... -0x0000002dc9efe4d0: 000001812b3aeeb0 0000000000000004 ..:+............ -0x0000002dc9efe4e0: 0000002dc9eff120 0000018154845660 ...-...`V.T.... -0x0000002dc9efe4f0: 000000074ee9fef8 000001812b3aee10 ...N......:+.... -0x0000002dc9efe500: 00007ffdb8dcef60 00000181547edb08 `.........~T.... -0x0000002dc9efe510: 0000002dc9eff120 000001815489033c ...-...<..T.... -0x0000002dc9efe520: 0000002dc9eff120 000001814d7aa734 ...-...4.zM.... -0x0000002dc9efe530: 0000002dc9eff120 000001814d6e97fc ...-.....nM.... -0x0000002dc9efe540: 0000000000000004 000000074b6022e8 ........."`K.... -0x0000002dc9efe550: 000000074cb713d0 000000074ca20930 ...L....0..L.... -0x0000002dc9efe560: 000000074e15b478 000000074ee9fef8 x..N.......N.... -0x0000002dc9efe570: 000001812b3aee98 000001812b3aee50 ..:+....P.:+.... -0x0000002dc9efe580: 3b9acdea00000002 0000000000000400 .......;........ -0x0000002dc9efe590: 0000050000000005 000001814dc5ba39 ........9..M.... -0x0000002dc9efe5a0: 0000002dc9eff120 000001814dc5eadc ...-......M.... -0x0000002dc9efe5b0: 0000000000000000 0000000000000100 ................ -0x0000002dc9efe5c0: 0000000000000000 000000074b602480 .........$`K.... -0x0000002dc9efe5d0: 000001810155cfc8 0000000000000001 ..U............. -0x0000002dc9efe5e0: 000001812b3af018 000000074ca959b0 ..:+.....Y.L.... -0x0000002dc9efe5f0: 000000074b600478 000000074ca959b0 x.`K.....Y.L.... - -Instructions: (pc=0x00007ffe8a1990b0) - 0x00007ffe8a198fb0: 00 00 00 00 e8 c7 b7 07 00 e9 7b ff ff ff 8b d6 - 0x00007ffe8a198fc0: e9 90 fe ff ff 41 8b f5 83 e6 01 75 13 49 8b 4c - 0x00007ffe8a198fd0: 24 08 e8 99 9c fe ff 49 c7 44 24 08 00 00 00 00 - 0x00007ffe8a198fe0: 48 8b 84 24 98 00 00 00 45 8b c5 8b 94 24 80 00 - 0x00007ffe8a198ff0: 00 00 48 8b cd c7 00 00 00 00 00 e8 98 92 04 00 - 0x00007ffe8a199000: 48 8b d8 48 85 c0 0f 84 8e 9a 08 00 48 8b 84 24 - 0x00007ffe8a199010: 98 00 00 00 c7 00 01 00 00 00 85 f6 75 1e 49 c7 - 0x00007ffe8a199020: 04 24 00 00 00 00 48 8b cd 49 c7 44 24 10 00 00 - 0x00007ffe8a199030: 00 00 49 89 6c 24 08 e8 64 00 00 00 48 8d 4d 20 - 0x00007ffe8a199040: 48 8b 51 08 4c 8d 41 08 48 33 d1 48 8b 02 48 33 - 0x00007ffe8a199050: c2 48 3b c1 0f 85 39 9a 08 00 48 33 cb 48 8b c2 - 0x00007ffe8a199060: 48 33 c3 48 89 0b 48 89 43 08 48 89 02 49 89 08 - 0x00007ffe8a199070: f6 85 b0 00 00 00 01 0f 85 dd 99 08 00 4c 8d 43 - 0x00007ffe8a199080: 30 48 8b d3 48 8b cd e8 7c d2 03 00 33 f6 e9 c4 - 0x00007ffe8a199090: fc ff ff cc cc cc cc cc cc cc cc cc cc cc cc cc - 0x00007ffe8a1990a0: 40 55 56 48 83 ec 58 33 ed 48 8b f1 89 6c 24 70 -=>0x00007ffe8a1990b0: f0 48 0f ba 29 00 72 08 48 83 c4 58 5e 5d c3 cc - 0x00007ffe8a1990c0: 48 89 9c 24 80 00 00 00 48 89 bc 24 88 00 00 00 - 0x00007ffe8a1990d0: 48 8b 39 4c 89 74 24 50 41 be 03 00 00 00 40 f6 - 0x00007ffe8a1990e0: c7 01 0f 84 db 00 00 00 e8 f3 bc 03 00 84 c0 0f - 0x00007ffe8a1990f0: 85 67 01 00 00 65 48 8b 04 25 30 00 00 00 48 8b - 0x00007ffe8a199100: 48 48 48 89 4c 24 38 32 c9 44 89 74 24 44 48 89 - 0x00007ffe8a199110: 6c 24 30 40 f6 c7 02 0f 85 f6 00 00 00 48 8d 44 - 0x00007ffe8a199120: 24 20 ba 0b 00 00 00 48 89 44 24 28 48 8d 5c 24 - 0x00007ffe8a199130: 20 48 8b c7 48 c1 e8 04 83 f8 01 89 44 24 40 49 - 0x00007ffe8a199140: 0f 4e d6 48 0b d3 85 c0 75 08 c7 44 24 40 fe ff - 0x00007ffe8a199150: ff ff 48 8b c7 f0 48 0f b1 16 48 8b f8 74 15 48 - 0x00007ffe8a199160: 8d 4c 24 70 e8 7f 51 03 00 0f 0d 0e 48 8b 3e e9 - 0x00007ffe8a199170: 6a ff ff ff 84 c9 0f 85 d3 00 00 00 66 83 3c 25 - 0x00007ffe8a199180: 6a 03 fe 7f 01 8b 1d 35 1e 14 00 76 5e 40 38 2c - 0x00007ffe8a199190: 25 97 02 fe 7f 0f 85 59 e9 07 00 0f b7 0c 25 d6 - 0x00007ffe8a1991a0: 02 fe 7f 33 d2 8b c3 f7 f1 8b d5 0f 1f 44 00 00 - - -Stack slot to memory mapping: - -stack at sp + 0 slots: 0x0 is null -stack at sp + 1 slots: 0x0000002dc9efe430 is pointing into the stack for thread: 0x000001816240f970 -stack at sp + 2 slots: 0x0000002dc9eff120 is pointing into the stack for thread: 0x000001816240f970 -stack at sp + 3 slots: 0x000001814d3926dc is at entry_point+1500 in (nmethod*)0x000001814d392008 -Compiled method (c1) 20155 3235 3 net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils::vkCheck (236 bytes) - total in heap [0x000001814d392008,0x000001814d392be0] = 3032 - main code [0x000001814d392100,0x000001814d392b60] = 2656 - stub code [0x000001814d392b60,0x000001814d392bd8] = 120 - oops [0x000001814d392bd8,0x000001814d392be0] = 8 - mutable data [0x0000018104286250,0x0000018104286398] = 328 - relocation [0x0000018104286250,0x0000018104286358] = 264 - metadata [0x0000018104286358,0x0000018104286398] = 64 - immutable data [0x0000018101354220,0x00000181013543f0] = 464 - dependencies [0x0000018101354220,0x0000018101354238] = 24 - nul chk table [0x0000018101354238,0x0000018101354258] = 32 - scopes pcs [0x0000018101354258,0x0000018101354358] = 256 - scopes data [0x0000018101354358,0x00000181013543f0] = 152 -stack at sp + 4 slots: 0x000000074f8bf3e0 is an oop: net.halbear.Terrain4J.EngineCore.Threads.RenderThread -{0x000000074f8bf3e0} - klass: 'net/halbear/Terrain4J/EngineCore/Threads/RenderThread' - flags: - - - ---- fields (total size 10 words): - - public 'TickRate' 'I' @12 0 (0x00000000) - - public 'TickThreshold' 'D' @16 0.000000 (0x0000000000000000) - - public 'EngineAccuracy' 'J' @24 100000000 (0x0000000005f5e100) - - public 'OriginalAccuracy' 'J' @32 0 (0x0000000000000000) - - public 'Frames' 'I' @40 39 (0x00000027) - - public 'TickFrames' 'I' @44 39 (0x00000027) - - public 'CappedToTickRate' 'Z' @48 false (0x00) - - public 'Throttle' 'Z' @49 true (0x01) - - public final 'gameLogic' 'Lnet/halbear/Terrain4J/EngineCore/Logic/GameLogic;' @52 a 'net/halbear/Terrain4J/EngineCore/Main/GameCore'{0x000000074ca0c140} (0xe9941828) - - public final 'EngineThread' 'Ljava/lang/Thread;' @56 a 'java/lang/Thread'{0x000000074e6df628} (0xe9cdbec5) - - public 'ThreadName' 'Ljava/lang/String;' @60 "Render"{0x000000074e6df440} (0xe9cdbe88) - - private 'render' 'Lnet/halbear/Terrain4J/EngineCore/Display/Render;' @64 a 'net/halbear/Terrain4J/EngineCore/Display/Render'{0x000000074b6d3fb8} (0xe96da7f7) - - private 'window' 'Lnet/halbear/Terrain4J/EngineCore/Display/Window;' @68 null (0x00000000) - - private final 'initData' 'Lnet/halbear/Terrain4J/EngineCore/Logic/InitData;' @72 a 'net/halbear/Terrain4J/EngineCore/Logic/InitData'{0x000000074f8b43c0} (0xe9f16878) -stack at sp + 5 slots: 0x000001814d3926dc is at entry_point+1500 in (nmethod*)0x000001814d392008 -Compiled method (c1) 20157 3235 3 net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils::vkCheck (236 bytes) - total in heap [0x000001814d392008,0x000001814d392be0] = 3032 - main code [0x000001814d392100,0x000001814d392b60] = 2656 - stub code [0x000001814d392b60,0x000001814d392bd8] = 120 - oops [0x000001814d392bd8,0x000001814d392be0] = 8 - mutable data [0x0000018104286250,0x0000018104286398] = 328 - relocation [0x0000018104286250,0x0000018104286358] = 264 - metadata [0x0000018104286358,0x0000018104286398] = 64 - immutable data [0x0000018101354220,0x00000181013543f0] = 464 - dependencies [0x0000018101354220,0x0000018101354238] = 24 - nul chk table [0x0000018101354238,0x0000018101354258] = 32 - scopes pcs [0x0000018101354258,0x0000018101354358] = 256 - scopes data [0x0000018101354358,0x00000181013543f0] = 152 -stack at sp + 6 slots: 0x0000002dc9eff120 is pointing into the stack for thread: 0x000001816240f970 -stack at sp + 7 slots: 0x000000000e1954c0 is a pointer to class: -java.lang.Class {0x000000000e1954c8} - - instance size: 15 - - klass size: 97 - - access: public final synchronized - - flags: rewritten has_nonstatic_fields has_nonstatic_concrete_methods defined_by_boot_loader has_localvariable_table has_resolved_methods - - state: fully_initialized - - name: 'java/lang/Class' - - super: 'java/lang/Object' - - sub: - - arrays: 'java/lang/Class'[] - - methods: Array(0x000000000e75de70) - - method ordering: Array(0x000000000e6abd50) - - local interfaces: Array(0x000000000e763ce8) - - trans. interfaces: Array(0x000000000e763d20) - - secondary supers: Array(0x000000000e759e08) - - hash_slot: 25 - - secondary bitmap: 0x8002040300880000 - - constants: constant pool [1652]/operands[42] {0x000000000e75a948} for 'java/lang/Class' cache=0x000000000e197470 - - class loader data: loader data: 0x00000181622b12b0 of 'bootstrap' - - source file: 'Class.java' - - field annotations: Array(0x000000000e75dd48) - - generic signature: 'Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/reflect/GenericDeclaration;Ljava/lang/reflect/Type;Ljava/lang/reflect/AnnotatedElement;Ljava/lang/invoke/TypeDescriptor$OfField;>;Ljava/lang/constant/Constable;' - - inner classes: Array(0x000000000e6ab168) - - nest members: Array(0x000000000e6ac138) - - permitted subclasses: Array(0x000000000e6a9110) - - java mirror: a 'java/lang/Class'{0x00000007ffe8b138} = 'java/lang/Class' - - vtable length 5 (start addr: 0x000000000e195698) - - itable length 32 (start addr: 0x000000000e1956c0) - - ---- static fields (5 words): - - private static final 'ANNOTATION' 'I' @144 - - private static final 'ENUM' 'I' @148 - - private static final 'SYNTHETIC' 'I' @152 - - private static final 'EMPTY_CLASS_ARRAY' '[Ljava/lang/Class;' @120 - - private static final 'serialVersionUID' 'J' @136 - - private static final 'serialPersistentFields' '[Ljava/io/ObjectStreamField;' @124 - - private static 'reflectionFactory' 'Ljdk/internal/reflect/ReflectionFactory;' @128 - - ---- non-static fields (26 words): - - private volatile transient 'classRedefinedCount' 'I' @12 - - injected 'klass' 'J' @16 - - injected 'array_klass' 'J' @24 - - injected 'oop_size' 'I' @32 - - injected 'static_oop_field_count' 'I' @36 - - private final transient 'modifiers' 'C' @40 - - private final transient 'primitive' 'Z' @42 - - private volatile transient 'cachedConstructor' 'Ljava/lang/reflect/Constructor;' @44 - - private transient 'name' 'Ljava/lang/String;' @48 - - private transient 'module' 'Ljava/lang/Module;' @52 - - private final 'classLoader' 'Ljava/lang/ClassLoader;' @56 - - private transient 'classData' 'Ljava/lang/Object;' @60 - - private transient 'signers' '[Ljava/lang/Object;' @64 - - private transient 'packageName' 'Ljava/lang/String;' @68 - - private final transient 'componentType' 'Ljava/lang/Class;' @72 - - private final transient 'protectionDomain' 'Ljava/security/ProtectionDomain;' @76 - - private volatile transient 'reflectionData' 'Ljava/lang/ref/SoftReference;' @80 - - private volatile transient 'genericInfo' 'Lsun/reflect/generics/repository/ClassRepository;' @84 - - private volatile transient 'enumConstants' '[Ljava/lang/Object;' @88 - - private volatile transient 'enumConstantDirectory' 'Ljava/util/Map;' @92 - - private volatile transient 'annotationData' 'Ljava/lang/Class$AnnotationData;' @96 - - private volatile transient 'annotationType' 'Lsun/reflect/annotation/AnnotationType;' @100 - - transient 'classValueMap' 'Ljava/lang/ClassValue$ClassValueMap;' @104 - - injected 'source_file' 'Ljava/lang/Object;' @108 - - injected '' 'Ljava/lang/Object;' @112 - - non-static oop maps (1 entries): 44-112 - - ---- field info search table: - [0] #22,#23 = modifiers:C @ 000000000E4D2068,000000000E4D6730 - [2] #350,#351 = name:Ljava/lang/String; @ 000000000E4D3AE8,000000000E4D6EA8 - [4] #797,#798 = classRedefinedCount:I @ 000000000E4DA558,000000000E4D6748 - [6] #14,#15 = classLoader:Ljava/lang/ClassLoader; @ 000000000E4DA578,000000000E4D6E38 - [8] #18,#19 = componentType:Ljava/lang/Class; @ 000000000E4DA590,000000000E4D6E90 - [10] #1270,#1271 = serialPersistentFields:[Ljava/io/ObjectStreamField; @ 000000000E4DD340,000000000E4DD360 - [12] #1294,#1295 = serialVersionUID:J @ 000000000E4DD428,000000000E4D6750 - [14] #26,#27 = protectionDomain:Ljava/security/ProtectionDomain; @ 000000000E4DF3A8,000000000E4D2478 - [16] #30,#31 = primitive:Z @ 000000000E4DF3C0,000000000E4D6760 - [18] #286,#287 = cachedConstructor:Ljava/lang/reflect/Constructor; @ 000000000E4DF930,000000000E4DF948 - [20] #357,#358 = module:Ljava/lang/Module; @ 000000000E4DFC08,000000000E4D6F50 - [22] #361,#362 = classData:Ljava/lang/Object; @ 000000000E4DFC18,000000000E4D6E58 - [24] #380,#351 = packageName:Ljava/lang/String; @ 000000000E4DFD20,000000000E4D6EA8 - [26] #402,#794 = reflectionData:Ljava/lang/ref/SoftReference; @ 000000000E4DFD80,000000000E4D2450 - [28] #448,#449 = signers:[Ljava/lang/Object; @ 000000000E4DFF80,000000000E4D6E70 - [30] #833,#834 = genericInfo:Lsun/reflect/generics/repository/ClassRepository; @ 000000000E4E1228,000000000E4E1240 - [32] #925,#409 = EMPTY_CLASS_ARRAY:[Ljava/lang/Class; @ 000000000E4E16E0,000000000E4D6E20 - [34] #965,#966 = reflectionFactory:Ljdk/internal/reflect/ReflectionFactory; @ 000000000E4E18A8,000000000E4E18C0 - [36] #973,#449 = enumConstants:[Ljava/lang/Object; @ 000000000E4E1910,000000000E4D6E70 - [38] #990,#952 = enumConstantDirectory:Ljava/util/Map; @ 000000000E4E1938,000000000E4E1860 - [40] #1027,#1063 = annotationData:Ljava/lang/Class$AnnotationData; @ 000000000E4E1A18,000000000E4E1CB0 - [42] #1148,#1149 = annotationType:Lsun/reflect/annotation/AnnotationType; @ 000000000E4E2078,000000000E4E2090 - [44] #1280,#798 = ANNOTATION:I @ 000000000E4E2638,000000000E4D6748 - [46] #1283,#798 = ENUM:I @ 000000000E4E2648,000000000E4D6748 - [48] #1285,#798 = SYNTHETIC:I @ 000000000E4E2658,000000000E4D6748 - [50] #1300,#1301 = classValueMap:Ljava/lang/ClassValue$ClassValueMap; @ 000000000E4E2768,000000000E4E2780 - -Lock stack of current Java thread (top to bottom): - --------------------------------------------------------------------------------- -Decoding CodeBlob, name: nep_invoker_blob, at [0x000001815448a460, 0x000001815448a568] 264 bytes -[MachCode] - 0x000001815448a460: 5548 8bec | 4883 ec20 | c5f8 7749 | 89af 3804 | 0000 49ba | 68a4 4854 | 8101 0000 | 4d89 9730 - 0x000001815448a480: 0400 0049 | 89a7 2804 | 0000 41c7 | 87d4 0400 | 0004 0000 | 004c 8bd2 | 498b d149 | 8bc8 41ff - 0x000001815448a4a0: d2c5 f877 | 41c7 87d4 | 0400 0005 | 0000 00f0 | 8344 24c0 | 0049 3b6f | 280f 874d | 0000 0041 - 0x000001815448a4c0: 83bf d004 | 0000 000f | 853f 0000 | 0041 c787 | d404 0000 | 0800 0000 | 4183 bf50 | 0500 0002 - 0x000001815448a4e0: 0f84 5300 | 0000 49c7 | 8728 0400 | 0000 0000 | 0049 c787 | 3804 0000 | 0000 0000 | 49c7 8730 - 0x000001815448a500: 0400 0000 | 0000 00c5 | f877 c9c3 | 4889 0424 | 498b cfc5 | f877 4c8b | e448 83ec | 2048 83e4 - 0x000001815448a520: f048 b890 | f206 bffd | 7f00 00ff | d049 8be4 | 4d33 e448 | 8b04 24eb | 9448 8904 | 24c5 f877 - 0x000001815448a540: 4c8b e448 | 83ec 2048 | 83e4 f048 | b880 5e40 | bffd 7f00 | 00ff d049 | 8be4 4d33 | e448 8b04 - 0x000001815448a560: 24eb 83f4 | f4f4 f4f4 -[/MachCode] --------------------------------------------------------------------------------- - - -Compiled method (c1) 20166 4232 3 org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI (11 bytes) - total in heap [0x000001814d850308,0x000001814d8533d8] = 12496 - main code [0x000001814d850400,0x000001814d853240] = 11840 - stub code [0x000001814d853240,0x000001814d853350] = 272 - oops [0x000001814d853350,0x000001814d8533d8] = 136 - mutable data [0x00000181001d2030,0x00000181001d23e8] = 952 - relocation [0x00000181001d2030,0x00000181001d22b0] = 640 - metadata [0x00000181001d22b0,0x00000181001d23e8] = 312 - immutable data [0x00000181047facf0,0x00000181047fb6f8] = 2568 - dependencies [0x00000181047facf0,0x00000181047fad38] = 72 - nul chk table [0x00000181047fad38,0x00000181047fad68] = 48 - handler table [0x00000181047fad68,0x00000181047fae28] = 192 - scopes pcs [0x00000181047fae28,0x00000181047fb1c8] = 928 - scopes data [0x00000181047fb1c8,0x00000181047fb6f8] = 1328 - -[Constant Pool (empty)] - -[MachCode] -[Instructions begin] - 0x000001814d850400: 6666 660f | 1f84 0000 | 0000 0066 | 6666 9066 | 6690 448b | 5208 443b - - 0x000001814d850418: ; {runtime_call Shared Runtime ic_miss_blob} - 0x000001814d850418: 5008 0f85 | c0e8 9006 -[Verified Entry Point] - 0x000001814d850420: 8984 2400 | 80ff ff55 | 4881 ec20 | 0200 0090 | 4181 7f20 | 0100 0000 - - 0x000001814d850438: ; {runtime_call Stub::method_entry_barrier} - 0x000001814d850438: 7405 e8a1 | 528f 064c | 8984 24c0 | 0100 004c | 898c 24c8 | 0100 0048 | 89bc 24d0 - - 0x000001814d850454: ; {metadata(method data for {method} {0x00000181636545e0} 'callPPI' '(Ljava/lang/foreign/MemorySegment;JJ)I' in 'org/lwjgl/system/JNIBindingsImpl+0x000000000f070000')} - 0x000001814d850454: 0100 0048 | bed0 e466 | 6381 0100 | 008b 9e90 | 0000 0083 | c302 899e | 9000 0000 | 81e3 fe07 - 0x000001814d850474: 0000 85db | 0f84 c328 - - 0x000001814d85047c: ; {metadata(method data for {method} {0x00000181636545e0} 'callPPI' '(Ljava/lang/foreign/MemorySegment;JJ)I' in 'org/lwjgl/system/JNIBindingsImpl+0x000000000f070000')} - 0x000001814d85047c: 0000 48ba | d0e4 6663 | 8101 0000 | 4883 82d8 | 0000 0001 - - 0x000001814d850490: ; {metadata(method data for {method} {0x0000018163a3a2b8} 'invokeExact_MT' '(Ljava/lang/Object;Ljava/lang/Object;JJLjava/lang/Object;)I' in 'java/lang/invoke/LambdaForm$MH+0x000000000f125000')} - 0x000001814d850490: 48ba 00bc | 1764 8101 | 0000 8bb2 | 9000 0000 | 83c6 0289 | b290 0000 | 0081 e6fe | ff1f 0085 - 0x000001814d8504b0: f60f 84ab - - 0x000001814d8504b4: ; {metadata(method data for {method} {0x0000018163a3a2b8} 'invokeExact_MT' '(Ljava/lang/Object;Ljava/lang/Object;JJLjava/lang/Object;)I' in 'java/lang/invoke/LambdaForm$MH+0x000000000f125000')} - 0x000001814d8504b4: 2800 0048 | ba00 bc17 | 6481 0100 | 0048 8382 | f801 0000 - - 0x000001814d8504c8: ; {metadata(method data for {method} {0x000000000e47d768} 'checkExactType' '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)V' in 'java/lang/invoke/Invokers')} - 0x000001814d8504c8: 0148 ba28 | 5032 6381 | 0100 008b | b290 0000 | 0083 c602 | 89b2 9000 | 0000 81e6 | feff 1f00 - 0x000001814d8504e8: 85f6 0f84 | 9328 0000 - - 0x000001814d8504f0: ; {oop(a 'java/lang/invoke/BoundMethodHandle$Species_LLL'{0x000000074f609090})} - 0x000001814d8504f0: 48ba 9090 | 604f 0700 - - 0x000001814d8504f8: ; {metadata(method data for {method} {0x000000000e47d768} 'checkExactType' '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)V' in 'java/lang/invoke/Invokers')} - 0x000001814d8504f8: 0000 48be | 2850 3263 | 8101 0000 | 8b52 0841 | ba00 0000 | 0e49 03d2 | 483b 96e0 | 0000 0075 - 0x000001814d850518: 0d48 8386 | e800 0000 | 01e9 aa01 | 0000 483b | 96f0 0000 | 0075 0d48 | 8386 f800 | 0000 01e9 - 0x000001814d850538: 9401 0000 | 483b 9600 | 0100 0075 | 0d48 8386 | 0801 0000 | 01e9 7e01 | 0000 483b | 9610 0100 - 0x000001814d850558: 0075 0d48 | 8386 1801 | 0000 01e9 | 6801 0000 | 483b 9620 | 0100 0075 | 0d48 8386 | 2801 0000 - 0x000001814d850578: 01e9 5201 | 0000 483b | 9630 0100 | 0075 0d48 | 8386 3801 | 0000 01e9 | 3c01 0000 | 483b 9640 - 0x000001814d850598: 0100 0075 | 0d48 8386 | 4801 0000 | 01e9 2601 | 0000 483b | 9650 0100 | 0075 0d48 | 8386 5801 - 0x000001814d8505b8: 0000 01e9 | 1001 0000 | 4883 bee0 | 0000 0000 | 7517 4889 | 96e0 0000 | 0048 c786 | e800 0000 - 0x000001814d8505d8: 0100 0000 | e9ef 0000 | 0048 83be | f000 0000 | 0075 1748 | 8996 f000 | 0000 48c7 | 86f8 0000 - 0x000001814d8505f8: ; {other} - 0x000001814d8505f8: 0001 0000 | 00e9 ce00 | 0000 4883 | be00 0100 | 0000 7517 | 4889 9600 | 0100 0048 | c786 0801 - 0x000001814d850618: 0000 0100 | 0000 e9ad | 0000 0048 | 83be 1001 | 0000 0075 | 1748 8996 | 1001 0000 | 48c7 8618 - 0x000001814d850638: 0100 0001 | 0000 00e9 | 8c00 0000 | 4883 be20 | 0100 0000 | 7517 4889 | 9620 0100 | 0048 c786 - 0x000001814d850658: 2801 0000 | 0100 0000 | e96b 0000 | 0048 83be | 3001 0000 | 0075 1748 | 8996 3001 | 0000 48c7 - 0x000001814d850678: 8638 0100 | 0001 0000 | 00e9 4a00 | 0000 4883 | be40 0100 | 0000 7517 | 4889 9640 | 0100 0048 - 0x000001814d850698: c786 4801 | 0000 0100 | 0000 e929 | 0000 0048 | 83be 5001 | 0000 0075 | 1748 8996 | 5001 0000 - 0x000001814d8506b8: 48c7 8658 | 0100 0001 | 0000 00e9 | 0800 0000 | 4883 86d8 | 0000 0001 - - 0x000001814d8506d0: ; {metadata(method data for {method} {0x000000000e47d768} 'checkExactType' '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)V' in 'java/lang/invoke/Invokers')} - 0x000001814d8506d0: 48ba 2850 | 3263 8101 | 0000 ff82 | 6801 0000 - - 0x000001814d8506e0: ; {metadata(method data for {method} {0x0000018163a3a2b8} 'invokeExact_MT' '(Ljava/lang/Object;Ljava/lang/Object;JJLjava/lang/Object;)I' in 'java/lang/invoke/LambdaForm$MH+0x000000000f125000')} - 0x000001814d8506e0: 48ba 00bc | 1764 8101 | 0000 4883 | 8208 0200 - - 0x000001814d8506f0: ; {metadata(method data for {method} {0x000000000e47d660} 'checkCustomized' '(Ljava/lang/invoke/MethodHandle;)V' in 'java/lang/invoke/Invokers')} - 0x000001814d8506f0: 0001 48ba | b8b7 3163 | 8101 0000 | 8bb2 9000 | 0000 83c6 | 0289 b290 | 0000 0081 | e6fe ff1f - 0x000001814d850710: 0085 f60f | 848b 2600 - - 0x000001814d850718: ; {metadata(method data for {method} {0x000000000e47d660} 'checkCustomized' '(Ljava/lang/invoke/MethodHandle;)V' in 'java/lang/invoke/Invokers')} - 0x000001814d850718: 0048 bab8 | b731 6381 | 0100 0048 | 8382 d800 - - 0x000001814d850728: ; {metadata(method data for {method} {0x000000000e1ff700} 'isCompileConstant' '(Ljava/lang/Object;)Z' in 'java/lang/invoke/MethodHandleImpl')} - 0x000001814d850728: 0000 0148 | ba20 b931 | 6381 0100 | 008b b290 | 0000 0083 | c602 89b2 | 9000 0000 | 81e6 feff - 0x000001814d850748: 1f00 85f6 | 0f84 7326 - - 0x000001814d850750: ; {metadata(method data for {method} {0x000000000e47d660} 'checkCustomized' '(Ljava/lang/invoke/MethodHandle;)V' in 'java/lang/invoke/Invokers')} - 0x000001814d850750: 0000 48ba | b8b7 3163 | 8101 0000 | ff82 e800 - - 0x000001814d850760: ; {metadata(method data for {method} {0x000000000e47d660} 'checkCustomized' '(Ljava/lang/invoke/MethodHandle;)V' in 'java/lang/invoke/Invokers')} - 0x000001814d850760: 0000 48ba | b8b7 3163 | 8101 0000 | ff82 0801 - - 0x000001814d850770: ; {metadata(method data for {method} {0x0000018163a3a2b8} 'invokeExact_MT' '(Ljava/lang/Object;Ljava/lang/Object;JJLjava/lang/Object;)I' in 'java/lang/invoke/LambdaForm$MH+0x000000000f125000')} - 0x000001814d850770: 0000 48ba | 00bc 1764 | 8101 0000 | 4883 8218 | 0200 0001 - - 0x000001814d850784: ; {metadata(method data for {method} {0x000001816415db40} 'invoke' '(Ljava/lang/Object;Ljava/lang/Object;JJ)I' in 'java/lang/invoke/LambdaForm$MH+0x000000000f1ef400')} - 0x000001814d850784: 48ba 0084 | 2064 8101 | 0000 8bb2 | 9000 0000 | 83c6 0289 | b290 0000 | 0081 e6fe | ff1f 0085 - 0x000001814d8507a4: f60f 843b - - 0x000001814d8507a8: ; {metadata(method data for {method} {0x000001816415db40} 'invoke' '(Ljava/lang/Object;Ljava/lang/Object;JJ)I' in 'java/lang/invoke/LambdaForm$MH+0x000000000f1ef400')} - 0x000001814d8507a8: 2600 0048 | ba00 8420 | 6481 0100 | 0048 8382 | f801 0000 - - 0x000001814d8507bc: ; {metadata(method data for {method} {0x00000181634b0288} 'invokeStatic' '(Ljava/lang/Object;Ljava/lang/Object;)V' in 'java/lang/invoke/LambdaForm$DMH+0x000000000f04c800')} - 0x000001814d8507bc: 0148 bad8 | 044b 6381 | 0100 008b | b290 0000 | 0083 c602 | 89b2 9000 | 0000 81e6 | feff 1f00 - 0x000001814d8507dc: 85f6 0f84 | 2326 0000 - - 0x000001814d8507e4: ; {metadata(method data for {method} {0x00000181634b0288} 'invokeStatic' '(Ljava/lang/Object;Ljava/lang/Object;)V' in 'java/lang/invoke/LambdaForm$DMH+0x000000000f04c800')} - 0x000001814d8507e4: 48ba d804 | 4b63 8101 | 0000 4883 | 82d8 0000 - - 0x000001814d8507f4: ; {metadata(method data for {method} {0x000000000e206b80} 'internalMemberName' '(Ljava/lang/Object;)Ljava/lang/Object;' in 'java/lang/invoke/DirectMethodHandle')} - 0x000001814d8507f4: 0001 48ba | 0885 3163 | 8101 0000 | 8bb2 9000 | 0000 83c6 | 0289 b290 | 0000 0081 | e6fe ff1f - 0x000001814d850814: 0085 f60f | 840b 2600 - - 0x000001814d85081c: ; {metadata(method data for {method} {0x00000181634b0288} 'invokeStatic' '(Ljava/lang/Object;Ljava/lang/Object;)V' in 'java/lang/invoke/LambdaForm$DMH+0x000000000f04c800')} - 0x000001814d85081c: 0048 bad8 | 044b 6381 | 0100 0048 | 8382 7801 - - 0x000001814d85082c: ; {metadata(method data for {method} {0x00000181632a9710} 'checkSymbol' '(Ljava/lang/foreign/MemorySegment;)V' in 'jdk/internal/foreign/abi/SharedUtils')} - 0x000001814d85082c: 0000 0148 | ba00 c17e | 6381 0100 | 008b b290 | 0000 0083 | c602 89b2 | 9000 0000 | 81e6 feff - 0x000001814d85084c: 1f00 85f6 | 0f84 f325 - - 0x000001814d850854: ; {metadata(method data for {method} {0x00000181632a9710} 'checkSymbol' '(Ljava/lang/foreign/MemorySegment;)V' in 'jdk/internal/foreign/abi/SharedUtils')} - 0x000001814d850854: 0000 48ba | 00c1 7e63 | 8101 0000 | 4883 82d8 | 0000 0001 - - 0x000001814d850868: ; {metadata(method data for {method} {0x000000000e45b4c8} 'requireNonNull' '(Ljava/lang/Object;)Ljava/lang/Object;' in 'java/util/Objects')} - 0x000001814d850868: 48ba c82f | 0163 8101 | 0000 8bb2 | 9000 0000 | 83c6 0289 | b290 0000 | 0081 e6fe | ff1f 0085 - 0x000001814d850888: f60f 84db | 2500 004d - - 0x000001814d850890: ; {metadata(method data for {method} {0x000000000e45b4c8} 'requireNonNull' '(Ljava/lang/Object;)Ljava/lang/Object;' in 'java/util/Objects')} - 0x000001814d850890: 85c0 48ba | c82f 0163 | 8101 0000 | bee8 0000 | 0074 05be | d800 0000 | 488b 1c32 | 488d 5b01 - 0x000001814d8508b0: 4889 1c32 | 0f84 e723 | 0000 4d85 | c00f 8426 - - 0x000001814d8508c0: ; {metadata('jdk/internal/foreign/AbstractMemorySegmentImpl')} - 0x000001814d8508c0: 0000 0048 | b8a8 1330 | 6381 0100 | 0041 8b58 | 0841 ba00 | 0000 0e49 | 03da 483b | 4338 0f85 - 0x000001814d8508e0: a725 0000 | e900 0000 | 0049 8bd0 - - 0x000001814d8508ec: ; implicit exception: dispatches to 0x000001814d852e90 - 0x000001814d8508ec: 493b 0049 - - 0x000001814d8508f0: ; {metadata(method data for {method} {0x00000181632a9710} 'checkSymbol' '(Ljava/lang/foreign/MemorySegment;)V' in 'jdk/internal/foreign/abi/SharedUtils')} - 0x000001814d8508f0: 8bd0 48be | 00c1 7e63 | 8101 0000 | 8b52 0841 | ba00 0000 | 0e49 03d2 | 483b 96f0 | 0000 0075 - 0x000001814d850910: 0d48 8386 | f800 0000 | 01e9 aa01 | 0000 483b | 9600 0100 | 0075 0d48 | 8386 0801 | 0000 01e9 - 0x000001814d850930: 9401 0000 | 483b 9610 | 0100 0075 | 0d48 8386 | 1801 0000 | 01e9 7e01 | 0000 483b | 9620 0100 - 0x000001814d850950: 0075 0d48 | 8386 2801 | 0000 01e9 | 6801 0000 | 483b 9630 | 0100 0075 | 0d48 8386 | 3801 0000 - 0x000001814d850970: 01e9 5201 | 0000 483b | 9640 0100 | 0075 0d48 | 8386 4801 | 0000 01e9 | 3c01 0000 | 483b 9650 - 0x000001814d850990: 0100 0075 | 0d48 8386 | 5801 0000 | 01e9 2601 | 0000 483b | 9660 0100 | 0075 0d48 | 8386 6801 - 0x000001814d8509b0: 0000 01e9 | 1001 0000 | 4883 bef0 | 0000 0000 | 7517 4889 | 96f0 0000 | 0048 c786 | f800 0000 - 0x000001814d8509d0: 0100 0000 | e9ef 0000 | 0048 83be | 0001 0000 | 0075 1748 | 8996 0001 | 0000 48c7 | 8608 0100 - 0x000001814d8509f0: ; {other} - 0x000001814d8509f0: 0001 0000 | 00e9 ce00 | 0000 4883 | be10 0100 | 0000 7517 | 4889 9610 | 0100 0048 | c786 1801 - 0x000001814d850a10: 0000 0100 | 0000 e9ad | 0000 0048 | 83be 2001 | 0000 0075 | 1748 8996 | 2001 0000 | 48c7 8628 - 0x000001814d850a30: 0100 0001 | 0000 00e9 | 8c00 0000 | 4883 be30 | 0100 0000 | 7517 4889 | 9630 0100 | 0048 c786 - 0x000001814d850a50: 3801 0000 | 0100 0000 | e96b 0000 | 0048 83be | 4001 0000 | 0075 1748 | 8996 4001 | 0000 48c7 - 0x000001814d850a70: 8648 0100 | 0001 0000 | 00e9 4a00 | 0000 4883 | be50 0100 | 0000 7517 | 4889 9650 | 0100 0048 - 0x000001814d850a90: c786 5801 | 0000 0100 | 0000 e929 | 0000 0048 | 83be 6001 | 0000 0075 | 1748 8996 | 6001 0000 - 0x000001814d850ab0: 48c7 8668 | 0100 0001 | 0000 00e9 | 0800 0000 | 4883 86e8 | 0000 0001 - - 0x000001814d850ac8: ; {oop(a 'jdk/internal/foreign/NativeMemorySegmentImpl'{0x000000074ca95988})} - 0x000001814d850ac8: 498b f049 | b888 59a9 | 4c07 0000 | 0048 8bd6 | 0f1f 8000 - - 0x000001814d850adc: ; {optimized virtual_call} - 0x000001814d850adc: 0000 00e8 - - 0x000001814d850ae0: ; ImmutableOopMap {[448]=Oop } - ;*invokeinterface equals {reexecute=0 rethrow=0 return_oop=0} - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@9 (line 372) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d850ae0: bc52 0007 - - 0x000001814d850ae4: ; {post_call_nop} - 0x000001814d850ae4: 0f1f 8400 | dc07 0000 - - 0x000001814d850aec: ; {metadata(method data for {method} {0x00000181632a9710} 'checkSymbol' '(Ljava/lang/foreign/MemorySegment;)V' in 'jdk/internal/foreign/abi/SharedUtils')} - 0x000001814d850aec: 85c0 48ba | 00c1 7e63 | 8101 0000 | be78 0100 | 0074 05be | 8801 0000 | 488b 3c32 | 488d 7f01 - 0x000001814d850b0c: 4889 3c32 | 0f84 750e | 0000 6690 - - 0x000001814d850b18: ; {other} - 0x000001814d850b18: e987 2300 | 0000 0000 | 0000 498b | 87c8 0100 | 0048 8d78 | 2849 3bbf | d801 0000 | 0f87 7423 - 0x000001814d850b38: 0000 4989 | bfc8 0100 | 0048 c700 | 0100 0000 | 488b ca41 | ba00 0000 | 0e49 2bca | 8948 0848 - 0x000001814d850b58: 33c9 8948 | 0c48 33c9 | 4889 4810 | 4889 4818 | 4889 4820 | 4889 8424 | e001 0000 | 0f1f 4000 - 0x000001814d850b78: ; {other} - 0x000001814d850b78: e94d 2300 | 0000 0000 | 0000 498b | 87c8 0100 | 0048 8d78 | 1849 3bbf | d801 0000 | 0f87 3a23 - 0x000001814d850b98: 0000 4989 | bfc8 0100 | 0048 c700 | 0100 0000 | 488b ca41 | ba00 0000 | 0e49 2bca | 8948 0848 - 0x000001814d850bb8: 33c9 8948 | 0c48 33c9 | 4889 4810 - - 0x000001814d850bc4: ; {metadata(method data for {method} {0x00000181632a9710} 'checkSymbol' '(Ljava/lang/foreign/MemorySegment;)V' in 'jdk/internal/foreign/abi/SharedUtils')} - 0x000001814d850bc4: 488b d048 | be00 c17e | 6381 0100 | 0048 8386 | 9801 0000 - - 0x000001814d850bd8: ; {metadata(method data for {method} {0x000000000e1c96b8} '' '()V' in 'java/lang/StringBuilder')} - 0x000001814d850bd8: 0148 ba80 | 5101 6381 | 0100 008b | b290 0000 | 0083 c602 | 89b2 9000 | 0000 81e6 | feff 1f00 - 0x000001814d850bf8: 85f6 0f84 | e122 0000 - - 0x000001814d850c00: ; {metadata(method data for {method} {0x000000000e1c96b8} '' '()V' in 'java/lang/StringBuilder')} - 0x000001814d850c00: 488b d048 | be80 5101 | 6381 0100 | 0048 8386 | d800 0000 | 0141 b810 | 0000 0048 | 8bd0 4889 - 0x000001814d850c20: 8424 d801 - - 0x000001814d850c24: ; {optimized virtual_call} - 0x000001814d850c24: 0000 90e8 - - 0x000001814d850c28: ; ImmutableOopMap {[448]=Oop [472]=Oop [480]=Oop } - ;*invokespecial {reexecute=0 rethrow=0 return_oop=0} - ; - java.lang.StringBuilder::@3 (line 106) - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@25 (line 373) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d850c28: b4e5 9006 - - 0x000001814d850c2c: ; {post_call_nop} - 0x000001814d850c2c: 0f1f 8400 | 2409 0001 | 488b 8424 | d801 0000 - - 0x000001814d850c3c: ; {metadata(method data for {method} {0x00000181632a9710} 'checkSymbol' '(Ljava/lang/foreign/MemorySegment;)V' in 'jdk/internal/foreign/abi/SharedUtils')} - 0x000001814d850c3c: 49b8 00c1 | 7e63 8101 | 0000 8b40 | 0841 ba00 | 0000 0e49 | 03c2 493b | 80b0 0100 | 0075 0d49 - 0x000001814d850c5c: 8380 b801 | 0000 01e9 | aa01 0000 | 493b 80c0 | 0100 0075 | 0d49 8380 | c801 0000 | 01e9 9401 - 0x000001814d850c7c: 0000 493b | 80d0 0100 | 0075 0d49 | 8380 d801 | 0000 01e9 | 7e01 0000 | 493b 80e0 | 0100 0075 - 0x000001814d850c9c: 0d49 8380 | e801 0000 | 01e9 6801 | 0000 493b | 80f0 0100 | 0075 0d49 | 8380 f801 | 0000 01e9 - 0x000001814d850cbc: 5201 0000 | 493b 8000 | 0200 0075 | 0d49 8380 | 0802 0000 | 01e9 3c01 | 0000 493b | 8010 0200 - 0x000001814d850cdc: 0075 0d49 | 8380 1802 | 0000 01e9 | 2601 0000 | 493b 8020 | 0200 0075 | 0d49 8380 | 2802 0000 - 0x000001814d850cfc: 01e9 1001 | 0000 4983 | b8b0 0100 | 0000 7517 | 4989 80b0 | 0100 0049 | c780 b801 | 0000 0100 - 0x000001814d850d1c: 0000 e9ef | 0000 0049 | 83b8 c001 | 0000 0075 | 1749 8980 | c001 0000 | 49c7 80c8 - - 0x000001814d850d38: ; {other} - 0x000001814d850d38: 0100 0001 | 0000 00e9 | ce00 0000 | 4983 b8d0 | 0100 0000 | 7517 4989 | 80d0 0100 | 0049 c780 - 0x000001814d850d58: d801 0000 | 0100 0000 | e9ad 0000 | 0049 83b8 | e001 0000 | 0075 1749 | 8980 e001 | 0000 49c7 - 0x000001814d850d78: 80e8 0100 | 0001 0000 | 00e9 8c00 | 0000 4983 | b8f0 0100 | 0000 7517 | 4989 80f0 | 0100 0049 - 0x000001814d850d98: c780 f801 | 0000 0100 | 0000 e96b | 0000 0049 | 83b8 0002 | 0000 0075 | 1749 8980 | 0002 0000 - 0x000001814d850db8: 49c7 8008 | 0200 0001 | 0000 00e9 | 4a00 0000 | 4983 b810 | 0200 0000 | 7517 4989 | 8010 0200 - 0x000001814d850dd8: 0049 c780 | 1802 0000 | 0100 0000 | e929 0000 | 0049 83b8 | 2002 0000 | 0075 1749 | 8980 2002 - 0x000001814d850df8: 0000 49c7 | 8028 0200 | 0001 0000 | 00e9 0800 | 0000 4983 | 80a8 0100 - - 0x000001814d850e10: ; {metadata(method data for {method} {0x000000000e1c98c8} 'append' '(Ljava/lang/String;)Ljava/lang/StringBuilder;' in 'java/lang/StringBuilder')} - 0x000001814d850e10: 0001 49b8 | f053 0163 | 8101 0000 | 418b 9090 | 0000 0083 | c202 4189 | 9090 0000 | 0081 e2fe - 0x000001814d850e30: ff1f 0085 | d20f 84c7 | 2000 0048 | 8b84 24d8 - - 0x000001814d850e40: ; {metadata(method data for {method} {0x000000000e1c98c8} 'append' '(Ljava/lang/String;)Ljava/lang/StringBuilder;' in 'java/lang/StringBuilder')} - 0x000001814d850e40: 0100 0049 | b8f0 5301 | 6381 0100 | 0049 8380 | d800 0000 - - 0x000001814d850e54: ; {oop("Symbol is NULL: "{0x000000074c643718})} - 0x000001814d850e54: 0149 b818 | 3764 4c07 | 0000 0048 | 8b94 24d8 - - 0x000001814d850e64: ; {optimized virtual_call} - 0x000001814d850e64: 0100 00e8 - - 0x000001814d850e68: ; ImmutableOopMap {[448]=Oop [472]=Oop [480]=Oop } - ;*invokespecial append {reexecute=0 rethrow=0 return_oop=0} - ; - java.lang.StringBuilder::append@2 (line 179) - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@31 (line 373) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d850e68: 74e3 9006 - - 0x000001814d850e6c: ; {post_call_nop} - 0x000001814d850e6c: 0f1f 8400 | 640b 0002 | 488b 8424 | d801 0000 - - 0x000001814d850e7c: ; {metadata(method data for {method} {0x00000181632a9710} 'checkSymbol' '(Ljava/lang/foreign/MemorySegment;)V' in 'jdk/internal/foreign/abi/SharedUtils')} - 0x000001814d850e7c: 48ba 00c1 | 7e63 8101 | 0000 8b40 | 0841 ba00 | 0000 0e49 | 03c2 483b | 8240 0200 | 0075 0d48 - 0x000001814d850e9c: 8382 4802 | 0000 01e9 | aa01 0000 | 483b 8250 | 0200 0075 | 0d48 8382 | 5802 0000 | 01e9 9401 - 0x000001814d850ebc: 0000 483b | 8260 0200 | 0075 0d48 | 8382 6802 | 0000 01e9 | 7e01 0000 | 483b 8270 | 0200 0075 - 0x000001814d850edc: 0d48 8382 | 7802 0000 | 01e9 6801 | 0000 483b | 8280 0200 | 0075 0d48 | 8382 8802 | 0000 01e9 - 0x000001814d850efc: 5201 0000 | 483b 8290 | 0200 0075 | 0d48 8382 | 9802 0000 | 01e9 3c01 | 0000 483b | 82a0 0200 - 0x000001814d850f1c: 0075 0d48 | 8382 a802 | 0000 01e9 | 2601 0000 | 483b 82b0 | 0200 0075 | 0d48 8382 | b802 0000 - 0x000001814d850f3c: 01e9 1001 | 0000 4883 | ba40 0200 | 0000 7517 | 4889 8240 | 0200 0048 | c782 4802 | 0000 0100 - 0x000001814d850f5c: 0000 e9ef | 0000 0048 | 83ba 5002 | 0000 0075 | 1748 8982 | 5002 0000 | 48c7 8258 - - 0x000001814d850f78: ; {other} - 0x000001814d850f78: 0200 0001 | 0000 00e9 | ce00 0000 | 4883 ba60 | 0200 0000 | 7517 4889 | 8260 0200 | 0048 c782 - 0x000001814d850f98: 6802 0000 | 0100 0000 | e9ad 0000 | 0048 83ba | 7002 0000 | 0075 1748 | 8982 7002 | 0000 48c7 - 0x000001814d850fb8: 8278 0200 | 0001 0000 | 00e9 8c00 | 0000 4883 | ba80 0200 | 0000 7517 | 4889 8280 | 0200 0048 - 0x000001814d850fd8: c782 8802 | 0000 0100 | 0000 e96b | 0000 0048 | 83ba 9002 | 0000 0075 | 1748 8982 | 9002 0000 - 0x000001814d850ff8: 48c7 8298 | 0200 0001 | 0000 00e9 | 4a00 0000 | 4883 baa0 | 0200 0000 | 7517 4889 | 82a0 0200 - 0x000001814d851018: 0048 c782 | a802 0000 | 0100 0000 | e929 0000 | 0048 83ba | b002 0000 | 0075 1748 | 8982 b002 - 0x000001814d851038: 0000 48c7 | 82b8 0200 | 0001 0000 | 00e9 0800 | 0000 4883 | 8238 0200 - - 0x000001814d851050: ; {metadata(method data for {method} {0x000000000e1c9870} 'append' '(Ljava/lang/Object;)Ljava/lang/StringBuilder;' in 'java/lang/StringBuilder')} - 0x000001814d851050: 0001 48ba | 585a 0163 | 8101 0000 | 8bb2 9000 | 0000 83c6 | 0289 b290 | 0000 0081 | e6fe ff1f - 0x000001814d851070: 0085 f60f | 84aa 1e00 - - 0x000001814d851078: ; {metadata(method data for {method} {0x000000000e1c9870} 'append' '(Ljava/lang/Object;)Ljava/lang/StringBuilder;' in 'java/lang/StringBuilder')} - 0x000001814d851078: 0048 ba58 | 5a01 6381 | 0100 0048 | 8382 d800 - - 0x000001814d851088: ; {metadata(method data for {method} {0x000000000e4b0248} 'valueOf' '(Ljava/lang/Object;)Ljava/lang/String;' in 'java/lang/String')} - 0x000001814d851088: 0000 0148 | baf8 5b01 | 6381 0100 | 008b b290 | 0000 0083 | c602 89b2 | 9000 0000 | 81e6 feff - 0x000001814d8510a8: 1f00 85f6 | 0f84 921e | 0000 4c8b | 8424 c001 | 0000 4d85 - - 0x000001814d8510bc: ; {metadata(method data for {method} {0x000000000e4b0248} 'valueOf' '(Ljava/lang/Object;)Ljava/lang/String;' in 'java/lang/String')} - 0x000001814d8510bc: c048 baf8 | 5b01 6381 | 0100 00be | d800 0000 | 7505 bee8 | 0000 0048 | 8b3c 3248 | 8d7f 0148 - 0x000001814d8510dc: 893c 320f | 851f 0000 - - 0x000001814d8510e4: ; {metadata(method data for {method} {0x000000000e4b0248} 'valueOf' '(Ljava/lang/Object;)Ljava/lang/String;' in 'java/lang/String')} - 0x000001814d8510e4: 0048 baf8 | 5b01 6381 | 0100 00ff | 82f8 0000 - - 0x000001814d8510f4: ; {oop("null"{0x00000007ffe3c5c8})} - 0x000001814d8510f4: 0048 bec8 | c5e3 ff07 | 0000 00e9 | fb01 0000 - - 0x000001814d851104: ; {metadata(method data for {method} {0x000000000e4b0248} 'valueOf' '(Ljava/lang/Object;)Ljava/lang/String;' in 'java/lang/String')} - 0x000001814d851104: 498b d048 | bef8 5b01 | 6381 0100 | 008b 5208 | 41ba 0000 | 000e 4903 | d248 3b96 | 1801 0000 - 0x000001814d851124: 750d 4883 | 8620 0100 | 0001 e9aa | 0100 0048 | 3b96 2801 | 0000 750d | 4883 8630 | 0100 0001 - 0x000001814d851144: e994 0100 | 0048 3b96 | 3801 0000 | 750d 4883 | 8640 0100 | 0001 e97e | 0100 0048 | 3b96 4801 - 0x000001814d851164: 0000 750d | 4883 8650 | 0100 0001 | e968 0100 | 0048 3b96 | 5801 0000 | 750d 4883 | 8660 0100 - 0x000001814d851184: 0001 e952 | 0100 0048 | 3b96 6801 | 0000 750d | 4883 8670 | 0100 0001 | e93c 0100 | 0048 3b96 - 0x000001814d8511a4: 7801 0000 | 750d 4883 | 8680 0100 | 0001 e926 | 0100 0048 | 3b96 8801 | 0000 750d | 4883 8690 - 0x000001814d8511c4: 0100 0001 | e910 0100 | 0048 83be | 1801 0000 | 0075 1748 | 8996 1801 | 0000 48c7 | 8620 0100 - 0x000001814d8511e4: 0001 0000 | 00e9 ef00 | 0000 4883 | be28 0100 | 0000 7517 | 4889 9628 | 0100 0048 | c786 3001 - 0x000001814d851204: ; {other} - 0x000001814d851204: 0000 0100 | 0000 e9ce | 0000 0048 | 83be 3801 | 0000 0075 | 1748 8996 | 3801 0000 | 48c7 8640 - 0x000001814d851224: 0100 0001 | 0000 00e9 | ad00 0000 | 4883 be48 | 0100 0000 | 7517 4889 | 9648 0100 | 0048 c786 - 0x000001814d851244: 5001 0000 | 0100 0000 | e98c 0000 | 0048 83be | 5801 0000 | 0075 1748 | 8996 5801 | 0000 48c7 - 0x000001814d851264: 8660 0100 | 0001 0000 | 00e9 6b00 | 0000 4883 | be68 0100 | 0000 7517 | 4889 9668 | 0100 0048 - 0x000001814d851284: c786 7001 | 0000 0100 | 0000 e94a | 0000 0048 | 83be 7801 | 0000 0075 | 1748 8996 | 7801 0000 - 0x000001814d8512a4: 48c7 8680 | 0100 0001 | 0000 00e9 | 2900 0000 | 4883 be88 | 0100 0000 | 7517 4889 | 9688 0100 - 0x000001814d8512c4: 0048 c786 | 9001 0000 | 0100 0000 | e908 0000 | 0048 8386 | 1001 0000 | 0149 8bd0 | 0f1f 4400 - 0x000001814d8512e4: 0048 b8e0 | b0be 2b81 - - 0x000001814d8512ec: ; {virtual_call} - 0x000001814d8512ec: 0100 00e8 - - 0x000001814d8512f0: ; ImmutableOopMap {[448]=Oop [472]=Oop [480]=Oop } - ;*invokevirtual toString {reexecute=0 rethrow=0 return_oop=0} - ; - java.lang.String::valueOf@11 (line 4530) - ; - java.lang.StringBuilder::append@2 (line 173) - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@35 (line 373) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d8512f0: ece3 9006 - - 0x000001814d8512f4: ; {post_call_nop} - 0x000001814d8512f4: 0f1f 8400 | ec0f 0003 | 488b f048 | 8b84 24d8 - - 0x000001814d851304: ; {metadata(method data for {method} {0x000000000e1c9870} 'append' '(Ljava/lang/Object;)Ljava/lang/StringBuilder;' in 'java/lang/StringBuilder')} - 0x000001814d851304: 0100 0049 | b858 5a01 | 6381 0100 | 008b 4008 | 41ba 0000 | 000e 4903 | c249 3b80 | f000 0000 - 0x000001814d851324: 750d 4983 | 80f8 0000 | 0001 e9aa | 0100 0049 | 3b80 0001 | 0000 750d | 4983 8008 | 0100 0001 - 0x000001814d851344: e994 0100 | 0049 3b80 | 1001 0000 | 750d 4983 | 8018 0100 | 0001 e97e | 0100 0049 | 3b80 2001 - 0x000001814d851364: 0000 750d | 4983 8028 | 0100 0001 | e968 0100 | 0049 3b80 | 3001 0000 | 750d 4983 | 8038 0100 - 0x000001814d851384: 0001 e952 | 0100 0049 | 3b80 4001 | 0000 750d | 4983 8048 | 0100 0001 | e93c 0100 | 0049 3b80 - 0x000001814d8513a4: 5001 0000 | 750d 4983 | 8058 0100 | 0001 e926 | 0100 0049 | 3b80 6001 | 0000 750d | 4983 8068 - 0x000001814d8513c4: 0100 0001 | e910 0100 | 0049 83b8 | f000 0000 | 0075 1749 | 8980 f000 | 0000 49c7 | 80f8 0000 - 0x000001814d8513e4: 0001 0000 | 00e9 ef00 | 0000 4983 | b800 0100 | 0000 7517 | 4989 8000 | 0100 0049 | c780 0801 - 0x000001814d851404: ; {other} - 0x000001814d851404: 0000 0100 | 0000 e9ce | 0000 0049 | 83b8 1001 | 0000 0075 | 1749 8980 | 1001 0000 | 49c7 8018 - 0x000001814d851424: 0100 0001 | 0000 00e9 | ad00 0000 | 4983 b820 | 0100 0000 | 7517 4989 | 8020 0100 | 0049 c780 - 0x000001814d851444: 2801 0000 | 0100 0000 | e98c 0000 | 0049 83b8 | 3001 0000 | 0075 1749 | 8980 3001 | 0000 49c7 - 0x000001814d851464: 8038 0100 | 0001 0000 | 00e9 6b00 | 0000 4983 | b840 0100 | 0000 7517 | 4989 8040 | 0100 0049 - 0x000001814d851484: c780 4801 | 0000 0100 | 0000 e94a | 0000 0049 | 83b8 5001 | 0000 0075 | 1749 8980 | 5001 0000 - 0x000001814d8514a4: 49c7 8058 | 0100 0001 | 0000 00e9 | 2900 0000 | 4983 b860 | 0100 0000 | 7517 4989 | 8060 0100 - 0x000001814d8514c4: 0049 c780 | 6801 0000 | 0100 0000 | e908 0000 | 0049 8380 | e800 0000 - - 0x000001814d8514dc: ; {metadata(method data for {method} {0x000000000e1c98c8} 'append' '(Ljava/lang/String;)Ljava/lang/StringBuilder;' in 'java/lang/StringBuilder')} - 0x000001814d8514dc: 0149 b8f0 | 5301 6381 | 0100 0041 | 8b90 9000 | 0000 83c2 | 0241 8990 | 9000 0000 | 81e2 feff - 0x000001814d8514fc: 1f00 85d2 | 0f84 5f1a | 0000 488b | 8424 d801 - - 0x000001814d85150c: ; {metadata(method data for {method} {0x000000000e1c98c8} 'append' '(Ljava/lang/String;)Ljava/lang/StringBuilder;' in 'java/lang/StringBuilder')} - 0x000001814d85150c: 0000 49b8 | f053 0163 | 8101 0000 | 4983 80d8 | 0000 0001 | 4c8b c648 | 8b94 24d8 | 0100 000f - 0x000001814d85152c: ; {optimized virtual_call} - 0x000001814d85152c: 1f40 00e8 - - 0x000001814d851530: ; ImmutableOopMap {[448]=Oop [472]=Oop [480]=Oop } - ;*invokespecial append {reexecute=0 rethrow=0 return_oop=0} - ; - java.lang.StringBuilder::append@2 (line 179) - ; - java.lang.StringBuilder::append@5 (line 173) - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@35 (line 373) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d851530: acdc 9006 - - 0x000001814d851534: ; {post_call_nop} - 0x000001814d851534: 0f1f 8400 | 2c12 0004 | 488b 9c24 | d801 0000 - - 0x000001814d851544: ; {metadata(method data for {method} {0x00000181632a9710} 'checkSymbol' '(Ljava/lang/foreign/MemorySegment;)V' in 'jdk/internal/foreign/abi/SharedUtils')} - 0x000001814d851544: 488b c348 | ba00 c17e | 6381 0100 | 008b 4008 | 41ba 0000 | 000e 4903 | c248 3b82 | d002 0000 - 0x000001814d851564: 750d 4883 | 82d8 0200 | 0001 e9aa | 0100 0048 | 3b82 e002 | 0000 750d | 4883 82e8 | 0200 0001 - 0x000001814d851584: e994 0100 | 0048 3b82 | f002 0000 | 750d 4883 | 82f8 0200 | 0001 e97e | 0100 0048 | 3b82 0003 - 0x000001814d8515a4: 0000 750d | 4883 8208 | 0300 0001 | e968 0100 | 0048 3b82 | 1003 0000 | 750d 4883 | 8218 0300 - 0x000001814d8515c4: 0001 e952 | 0100 0048 | 3b82 2003 | 0000 750d | 4883 8228 | 0300 0001 | e93c 0100 | 0048 3b82 - 0x000001814d8515e4: 3003 0000 | 750d 4883 | 8238 0300 | 0001 e926 | 0100 0048 | 3b82 4003 | 0000 750d | 4883 8248 - 0x000001814d851604: 0300 0001 | e910 0100 | 0048 83ba | d002 0000 | 0075 1748 | 8982 d002 | 0000 48c7 | 82d8 0200 - 0x000001814d851624: 0001 0000 | 00e9 ef00 | 0000 4883 | bae0 0200 | 0000 7517 | 4889 82e0 | 0200 0048 | c782 e802 - 0x000001814d851644: ; {other} - 0x000001814d851644: 0000 0100 | 0000 e9ce | 0000 0048 | 83ba f002 | 0000 0075 | 1748 8982 | f002 0000 | 48c7 82f8 - 0x000001814d851664: 0200 0001 | 0000 00e9 | ad00 0000 | 4883 ba00 | 0300 0000 | 7517 4889 | 8200 0300 | 0048 c782 - 0x000001814d851684: 0803 0000 | 0100 0000 | e98c 0000 | 0048 83ba | 1003 0000 | 0075 1748 | 8982 1003 | 0000 48c7 - 0x000001814d8516a4: 8218 0300 | 0001 0000 | 00e9 6b00 | 0000 4883 | ba20 0300 | 0000 7517 | 4889 8220 | 0300 0048 - 0x000001814d8516c4: c782 2803 | 0000 0100 | 0000 e94a | 0000 0048 | 83ba 3003 | 0000 0075 | 1748 8982 | 3003 0000 - 0x000001814d8516e4: 48c7 8238 | 0300 0001 | 0000 00e9 | 2900 0000 | 4883 ba40 | 0300 0000 | 7517 4889 | 8240 0300 - 0x000001814d851704: 0048 c782 | 4803 0000 | 0100 0000 | e908 0000 | 0048 8382 | c802 0000 - - 0x000001814d85171c: ; {metadata(method data for {method} {0x000000000e1c8158} 'toString' '()Ljava/lang/String;' in 'java/lang/StringBuilder')} - 0x000001814d85171c: 0148 bae8 | 5e01 6381 | 0100 008b | b290 0000 | 0083 c602 | 89b2 9000 | 0000 81e6 | feff 1f00 - 0x000001814d85173c: 85f6 0f84 | 4218 0000 - - 0x000001814d851744: ; {metadata(method data for {method} {0x000000000e1c8158} 'toString' '()Ljava/lang/String;' in 'java/lang/StringBuilder')} - 0x000001814d851744: 488b c348 | bae8 5e01 | 6381 0100 | 008b 4008 | 41ba 0000 | 000e 4903 | c248 3b82 | e000 0000 - 0x000001814d851764: 750d 4883 | 82e8 0000 | 0001 e9aa | 0100 0048 | 3b82 f000 | 0000 750d | 4883 82f8 | 0000 0001 - 0x000001814d851784: e994 0100 | 0048 3b82 | 0001 0000 | 750d 4883 | 8208 0100 | 0001 e97e | 0100 0048 | 3b82 1001 - 0x000001814d8517a4: 0000 750d | 4883 8218 | 0100 0001 | e968 0100 | 0048 3b82 | 2001 0000 | 750d 4883 | 8228 0100 - 0x000001814d8517c4: 0001 e952 | 0100 0048 | 3b82 3001 | 0000 750d | 4883 8238 | 0100 0001 | e93c 0100 | 0048 3b82 - 0x000001814d8517e4: 4001 0000 | 750d 4883 | 8248 0100 | 0001 e926 | 0100 0048 | 3b82 5001 | 0000 750d | 4883 8258 - 0x000001814d851804: 0100 0001 | e910 0100 | 0048 83ba | e000 0000 | 0075 1748 | 8982 e000 | 0000 48c7 | 82e8 0000 - 0x000001814d851824: 0001 0000 | 00e9 ef00 | 0000 4883 | baf0 0000 | 0000 7517 | 4889 82f0 | 0000 0048 | c782 f800 - 0x000001814d851844: ; {other} - 0x000001814d851844: 0000 0100 | 0000 e9ce | 0000 0048 | 83ba 0001 | 0000 0075 | 1748 8982 | 0001 0000 | 48c7 8208 - 0x000001814d851864: 0100 0001 | 0000 00e9 | ad00 0000 | 4883 ba10 | 0100 0000 | 7517 4889 | 8210 0100 | 0048 c782 - 0x000001814d851884: 1801 0000 | 0100 0000 | e98c 0000 | 0048 83ba | 2001 0000 | 0075 1748 | 8982 2001 | 0000 48c7 - 0x000001814d8518a4: 8228 0100 | 0001 0000 | 00e9 6b00 | 0000 4883 | ba30 0100 | 0000 7517 | 4889 8230 | 0100 0048 - 0x000001814d8518c4: c782 3801 | 0000 0100 | 0000 e94a | 0000 0048 | 83ba 4001 | 0000 0075 | 1748 8982 | 4001 0000 - 0x000001814d8518e4: 48c7 8248 | 0100 0001 | 0000 00e9 | 2900 0000 | 4883 ba50 | 0100 0000 | 7517 4889 | 8250 0100 - 0x000001814d851904: 0048 c782 | 5801 0000 | 0100 0000 | e908 0000 | 0048 8382 | d800 0000 - - 0x000001814d85191c: ; {metadata(method data for {method} {0x000000000e1c8270} 'length' '()I' in 'java/lang/StringBuilder')} - 0x000001814d85191c: 0148 bab0 | 6001 6381 | 0100 008b | b290 0000 | 0083 c602 | 89b2 9000 | 0000 81e6 | feff 1f00 - 0x000001814d85193c: 85f6 0f84 | 6316 0000 - - 0x000001814d851944: ; {metadata(method data for {method} {0x000000000e1c8270} 'length' '()I' in 'java/lang/StringBuilder')} - 0x000001814d851944: 488b c348 | bab0 6001 | 6381 0100 | 0048 8382 | d800 0000 | 018b 530c - - 0x000001814d85195c: ; {metadata(method data for {method} {0x000000000e1c8158} 'toString' '()Ljava/lang/String;' in 'java/lang/StringBuilder')} - 0x000001814d85195c: 85d2 48ba | e85e 0163 | 8101 0000 | be68 0100 | 0075 05be | 7801 0000 | 488b 3c32 | 488d 7f01 - 0x000001814d85197c: 4889 3c32 | 0f85 4a12 | 0000 e92e - - 0x000001814d851988: ; {metadata(method data for {method} {0x000001816415db40} 'invoke' '(Ljava/lang/Object;Ljava/lang/Object;JJ)I' in 'java/lang/invoke/LambdaForm$MH+0x000000000f1ef400')} - 0x000001814d851988: 1200 0048 | ba00 8420 | 6481 0100 | 0048 8382 | 1803 0000 - - 0x000001814d85199c: ; {metadata(method data for {method} {0x0000018163a36290} 'invokeStatic' '(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;JJ)I' in 'java/lang/invoke/LambdaForm$DMH+0x000000000f123000')} - 0x000001814d85199c: 0148 bae0 | 64a3 6381 | 0100 008b | b290 0000 | 0083 c602 | 89b2 9000 | 0000 81e6 | feff 1f00 - 0x000001814d8519bc: 85f6 0f84 | 0416 0000 - - 0x000001814d8519c4: ; {metadata(method data for {method} {0x0000018163a36290} 'invokeStatic' '(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;JJ)I' in 'java/lang/invoke/LambdaForm$DMH+0x000000000f123000')} - 0x000001814d8519c4: 48ba e064 | a363 8101 | 0000 4883 | 82d8 0000 - - 0x000001814d8519d4: ; {metadata(method data for {method} {0x000000000e206b80} 'internalMemberName' '(Ljava/lang/Object;)Ljava/lang/Object;' in 'java/lang/invoke/DirectMethodHandle')} - 0x000001814d8519d4: 0001 48ba | 0885 3163 | 8101 0000 | 8bb2 9000 | 0000 83c6 | 0289 b290 | 0000 0081 | e6fe ff1f - 0x000001814d8519f4: 0085 f60f | 84ec 1500 - - 0x000001814d8519fc: ; {metadata(method data for {method} {0x0000018163a36290} 'invokeStatic' '(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;JJ)I' in 'java/lang/invoke/LambdaForm$DMH+0x000000000f123000')} - 0x000001814d8519fc: 0048 bae0 | 64a3 6381 | 0100 0048 | 8382 7801 - - 0x000001814d851a0c: ; {metadata(method data for {method} {0x0000018163cd43f0} 'invoke' '(Ljava/lang/foreign/SegmentAllocator;Ljava/lang/foreign/MemorySegment;JJ)I' in 'jdk/internal/foreign/abi/DowncallStub+0x000000000f160000')} - 0x000001814d851a0c: 0000 0148 | ba00 9020 | 6481 0100 | 008b b290 | 0000 0083 | c602 89b2 | 9000 0000 | 81e6 feff - 0x000001814d851a2c: 1f00 85f6 | 0f84 d415 | 0000 4c8b | 8424 c001 | 0000 4d85 - - 0x000001814d851a40: ; {metadata(method data for {method} {0x0000018163cd43f0} 'invoke' '(Ljava/lang/foreign/SegmentAllocator;Ljava/lang/foreign/MemorySegment;JJ)I' in 'jdk/internal/foreign/abi/DowncallStub+0x000000000f160000')} - 0x000001814d851a40: c048 bf00 | 9020 6481 | 0100 0075 | 0c80 8fd1 | 0000 0001 | e9f3 0100 | 0041 8b58 | 0841 ba00 - 0x000001814d851a60: 0000 0e49 | 03da 483b | 9fe0 0000 | 0075 0d48 | 8387 e800 | 0000 01e9 | aa01 0000 | 483b 9ff0 - 0x000001814d851a80: 0000 0075 | 0d48 8387 | f800 0000 | 01e9 9401 | 0000 483b | 9f00 0100 | 0075 0d48 | 8387 0801 - 0x000001814d851aa0: 0000 01e9 | 7e01 0000 | 483b 9f10 | 0100 0075 | 0d48 8387 | 1801 0000 | 01e9 6801 | 0000 483b - 0x000001814d851ac0: 9f20 0100 | 0075 0d48 | 8387 2801 | 0000 01e9 | 5201 0000 | 483b 9f30 | 0100 0075 | 0d48 8387 - 0x000001814d851ae0: 3801 0000 | 01e9 3c01 | 0000 483b | 9f40 0100 | 0075 0d48 | 8387 4801 | 0000 01e9 | 2601 0000 - 0x000001814d851b00: 483b 9f50 | 0100 0075 | 0d48 8387 | 5801 0000 | 01e9 1001 | 0000 4883 | bfe0 0000 | 0000 7517 - 0x000001814d851b20: 4889 9fe0 | 0000 0048 | c787 e800 | 0000 0100 | 0000 e9ef | 0000 0048 | 83bf f000 | 0000 0075 - 0x000001814d851b40: ; {other} - 0x000001814d851b40: 1748 899f | f000 0000 | 48c7 87f8 | 0000 0001 | 0000 00e9 | ce00 0000 | 4883 bf00 | 0100 0000 - 0x000001814d851b60: 7517 4889 | 9f00 0100 | 0048 c787 | 0801 0000 | 0100 0000 | e9ad 0000 | 0048 83bf | 1001 0000 - 0x000001814d851b80: 0075 1748 | 899f 1001 | 0000 48c7 | 8718 0100 | 0001 0000 | 00e9 8c00 | 0000 4883 | bf20 0100 - 0x000001814d851ba0: 0000 7517 | 4889 9f20 | 0100 0048 | c787 2801 | 0000 0100 | 0000 e96b | 0000 0048 | 83bf 3001 - 0x000001814d851bc0: 0000 0075 | 1748 899f | 3001 0000 | 48c7 8738 | 0100 0001 | 0000 00e9 | 4a00 0000 | 4883 bf40 - 0x000001814d851be0: 0100 0000 | 7517 4889 | 9f40 0100 | 0048 c787 | 4801 0000 | 0100 0000 | e929 0000 | 0048 83bf - 0x000001814d851c00: 5001 0000 | 0075 1748 | 899f 5001 | 0000 48c7 | 8758 0100 | 0001 0000 | 00e9 0800 | 0000 4883 - 0x000001814d851c20: 87d8 0000 - - 0x000001814d851c24: ; {metadata('jdk/internal/foreign/AbstractMemorySegmentImpl')} - 0x000001814d851c24: 0001 48bb | a813 3063 | 8101 0000 | 418b 7808 | 41ba 0000 | 000e 4903 | fa48 3b5f | 380f 85e4 - 0x000001814d851c44: 1300 00e9 | 0000 0000 | 498b d048 | 3b02 488b - - 0x000001814d851c54: ; {metadata(method data for {method} {0x0000018163cd43f0} 'invoke' '(Ljava/lang/foreign/SegmentAllocator;Ljava/lang/foreign/MemorySegment;JJ)I' in 'jdk/internal/foreign/abi/DowncallStub+0x000000000f160000')} - 0x000001814d851c54: f248 bf00 | 9020 6481 | 0100 008b | 7608 41ba | 0000 000e | 4903 f248 | 3bb7 7001 | 0000 750d - 0x000001814d851c74: 4883 8778 | 0100 0001 | e9aa 0100 | 0048 3bb7 | 8001 0000 | 750d 4883 | 8788 0100 | 0001 e994 - 0x000001814d851c94: 0100 0048 | 3bb7 9001 | 0000 750d | 4883 8798 | 0100 0001 | e97e 0100 | 0048 3bb7 | a001 0000 - 0x000001814d851cb4: 750d 4883 | 87a8 0100 | 0001 e968 | 0100 0048 | 3bb7 b001 | 0000 750d | 4883 87b8 | 0100 0001 - 0x000001814d851cd4: e952 0100 | 0048 3bb7 | c001 0000 | 750d 4883 | 87c8 0100 | 0001 e93c | 0100 0048 | 3bb7 d001 - 0x000001814d851cf4: 0000 750d | 4883 87d8 | 0100 0001 | e926 0100 | 0048 3bb7 | e001 0000 | 750d 4883 | 87e8 0100 - 0x000001814d851d14: 0001 e910 | 0100 0048 | 83bf 7001 | 0000 0075 | 1748 89b7 | 7001 0000 | 48c7 8778 | 0100 0001 - 0x000001814d851d34: 0000 00e9 | ef00 0000 | 4883 bf80 | 0100 0000 | 7517 4889 | b780 0100 | 0048 c787 | 8801 0000 - 0x000001814d851d54: ; {other} - 0x000001814d851d54: 0100 0000 | e9ce 0000 | 0048 83bf | 9001 0000 | 0075 1748 | 89b7 9001 | 0000 48c7 | 8798 0100 - 0x000001814d851d74: 0001 0000 | 00e9 ad00 | 0000 4883 | bfa0 0100 | 0000 7517 | 4889 b7a0 | 0100 0048 | c787 a801 - 0x000001814d851d94: 0000 0100 | 0000 e98c | 0000 0048 | 83bf b001 | 0000 0075 | 1748 89b7 | b001 0000 | 48c7 87b8 - 0x000001814d851db4: 0100 0001 | 0000 00e9 | 6b00 0000 | 4883 bfc0 | 0100 0000 | 7517 4889 | b7c0 0100 | 0048 c787 - 0x000001814d851dd4: c801 0000 | 0100 0000 | e94a 0000 | 0048 83bf | d001 0000 | 0075 1748 | 89b7 d001 | 0000 48c7 - 0x000001814d851df4: 87d8 0100 | 0001 0000 | 00e9 2900 | 0000 4883 | bfe0 0100 | 0000 7517 | 4889 b7e0 | 0100 0048 - 0x000001814d851e14: c787 e801 | 0000 0100 | 0000 e908 | 0000 0048 | 8387 6801 | 0000 018b | 7218 48c1 | e603 483b - 0x000001814d851e34: 0648 8bd6 - - 0x000001814d851e38: ; {metadata(method data for {method} {0x0000018163cd43f0} 'invoke' '(Ljava/lang/foreign/SegmentAllocator;Ljava/lang/foreign/MemorySegment;JJ)I' in 'jdk/internal/foreign/abi/DowncallStub+0x000000000f160000')} - 0x000001814d851e38: 48bf 0090 | 2064 8101 | 0000 8b52 | 0841 ba00 | 0000 0e49 | 03d2 483b | 9700 0200 | 0075 0d48 - 0x000001814d851e58: 8387 0802 | 0000 01e9 | aa01 0000 | 483b 9710 | 0200 0075 | 0d48 8387 | 1802 0000 | 01e9 9401 - 0x000001814d851e78: 0000 483b | 9720 0200 | 0075 0d48 | 8387 2802 | 0000 01e9 | 7e01 0000 | 483b 9730 | 0200 0075 - 0x000001814d851e98: 0d48 8387 | 3802 0000 | 01e9 6801 | 0000 483b | 9740 0200 | 0075 0d48 | 8387 4802 | 0000 01e9 - 0x000001814d851eb8: 5201 0000 | 483b 9750 | 0200 0075 | 0d48 8387 | 5802 0000 | 01e9 3c01 | 0000 483b | 9760 0200 - 0x000001814d851ed8: 0075 0d48 | 8387 6802 | 0000 01e9 | 2601 0000 | 483b 9770 | 0200 0075 | 0d48 8387 | 7802 0000 - 0x000001814d851ef8: 01e9 1001 | 0000 4883 | bf00 0200 | 0000 7517 | 4889 9700 | 0200 0048 | c787 0802 | 0000 0100 - 0x000001814d851f18: 0000 e9ef | 0000 0048 | 83bf 1002 | 0000 0075 | 1748 8997 | 1002 0000 | 48c7 8718 - - 0x000001814d851f34: ; {other} - 0x000001814d851f34: 0200 0001 | 0000 00e9 | ce00 0000 | 4883 bf20 | 0200 0000 | 7517 4889 | 9720 0200 | 0048 c787 - 0x000001814d851f54: 2802 0000 | 0100 0000 | e9ad 0000 | 0048 83bf | 3002 0000 | 0075 1748 | 8997 3002 | 0000 48c7 - 0x000001814d851f74: 8738 0200 | 0001 0000 | 00e9 8c00 | 0000 4883 | bf40 0200 | 0000 7517 | 4889 9740 | 0200 0048 - 0x000001814d851f94: c787 4802 | 0000 0100 | 0000 e96b | 0000 0048 | 83bf 5002 | 0000 0075 | 1748 8997 | 5002 0000 - 0x000001814d851fb4: 48c7 8758 | 0200 0001 | 0000 00e9 | 4a00 0000 | 4883 bf60 | 0200 0000 | 7517 4889 | 9760 0200 - 0x000001814d851fd4: 0048 c787 | 6802 0000 | 0100 0000 | e929 0000 | 0048 83bf | 7002 0000 | 0075 1748 | 8997 7002 - 0x000001814d851ff4: 0000 48c7 | 8778 0200 | 0001 0000 | 00e9 0800 | 0000 4883 | 87f8 0100 | 0001 488b | d648 89b4 - 0x000001814d852014: 24e8 0100 | 000f 1f40 | 0048 b808 | b1be 2b81 - - 0x000001814d852024: ; {virtual_call} - 0x000001814d852024: 0100 00e8 - - 0x000001814d852028: ; ImmutableOopMap {[448]=Oop [488]=Oop } - ;*invokevirtual acquire0 {reexecute=0 rethrow=0 return_oop=0} - ; - jdk.internal.foreign.abi.DowncallStub/0x000000000f160000::invoke@17 - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852028: e623 ff06 - - 0x000001814d85202c: ; {post_call_nop} - 0x000001814d85202c: 0f1f 8400 | 241d 0005 - - 0x000001814d852034: ; {metadata(method data for {method} {0x0000018163cd43f0} 'invoke' '(Ljava/lang/foreign/SegmentAllocator;Ljava/lang/foreign/MemorySegment;JJ)I' in 'jdk/internal/foreign/abi/DowncallStub+0x000000000f160000')} - 0x000001814d852034: 48ba 0090 | 2064 8101 | 0000 4883 | 8288 0200 | 0001 488b | 9424 c001 - - 0x000001814d85204c: ; {static_call} - 0x000001814d85204c: 0000 90e8 - - 0x000001814d852050: ; ImmutableOopMap {[448]=Oop [488]=Oop } - ;*invokestatic checkNative {reexecute=0 rethrow=0 return_oop=0} - ; - jdk.internal.foreign.abi.DowncallStub/0x000000000f160000::invoke@23 - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852050: ac87 0007 - - 0x000001814d852054: ; {post_call_nop} - 0x000001814d852054: 0f1f 8400 | 4c1d 0006 | 4c8b 8424 | c001 0000 - - 0x000001814d852064: ; {metadata(method data for {method} {0x0000018163cd43f0} 'invoke' '(Ljava/lang/foreign/SegmentAllocator;Ljava/lang/foreign/MemorySegment;JJ)I' in 'jdk/internal/foreign/abi/DowncallStub+0x000000000f160000')} - 0x000001814d852064: 4d85 c049 | b900 9020 | 6481 0100 | 0075 0d41 | 8089 9102 | 0000 01e9 | f301 0000 | 418b 7808 - 0x000001814d852084: 41ba 0000 | 000e 4903 | fa49 3bb9 | a002 0000 | 750d 4983 | 81a8 0200 | 0001 e9aa | 0100 0049 - 0x000001814d8520a4: 3bb9 b002 | 0000 750d | 4983 81b8 | 0200 0001 | e994 0100 | 0049 3bb9 | c002 0000 | 750d 4983 - 0x000001814d8520c4: 81c8 0200 | 0001 e97e | 0100 0049 | 3bb9 d002 | 0000 750d | 4983 81d8 | 0200 0001 | e968 0100 - 0x000001814d8520e4: 0049 3bb9 | e002 0000 | 750d 4983 | 81e8 0200 | 0001 e952 | 0100 0049 | 3bb9 f002 | 0000 750d - 0x000001814d852104: 4983 81f8 | 0200 0001 | e93c 0100 | 0049 3bb9 | 0003 0000 | 750d 4983 | 8108 0300 | 0001 e926 - 0x000001814d852124: 0100 0049 | 3bb9 1003 | 0000 750d | 4983 8118 | 0300 0001 | e910 0100 | 0049 83b9 | a002 0000 - 0x000001814d852144: 0075 1749 | 89b9 a002 | 0000 49c7 | 81a8 0200 | 0001 0000 | 00e9 ef00 | 0000 4983 | b9b0 0200 - 0x000001814d852164: ; {other} - 0x000001814d852164: 0000 7517 | 4989 b9b0 | 0200 0049 | c781 b802 | 0000 0100 | 0000 e9ce | 0000 0049 | 83b9 c002 - 0x000001814d852184: 0000 0075 | 1749 89b9 | c002 0000 | 49c7 81c8 | 0200 0001 | 0000 00e9 | ad00 0000 | 4983 b9d0 - 0x000001814d8521a4: 0200 0000 | 7517 4989 | b9d0 0200 | 0049 c781 | d802 0000 | 0100 0000 | e98c 0000 | 0049 83b9 - 0x000001814d8521c4: e002 0000 | 0075 1749 | 89b9 e002 | 0000 49c7 | 81e8 0200 | 0001 0000 | 00e9 6b00 | 0000 4983 - 0x000001814d8521e4: b9f0 0200 | 0000 7517 | 4989 b9f0 | 0200 0049 | c781 f802 | 0000 0100 | 0000 e94a | 0000 0049 - 0x000001814d852204: 83b9 0003 | 0000 0075 | 1749 89b9 | 0003 0000 | 49c7 8108 | 0300 0001 | 0000 00e9 | 2900 0000 - 0x000001814d852224: 4983 b910 | 0300 0000 | 7517 4989 | b910 0300 | 0049 c781 | 1803 0000 | 0100 0000 | e908 0000 - 0x000001814d852244: 0049 8381 | 9802 0000 - - 0x000001814d85224c: ; {metadata('jdk/internal/foreign/AbstractMemorySegmentImpl')} - 0x000001814d85224c: 0148 bfa8 | 1330 6381 | 0100 0045 | 8b48 0841 | ba00 0000 | 0e4d 03ca | 493b 7938 | 0f85 d00d - 0x000001814d85226c: 0000 e900 | 0000 0049 | 8bd0 483b | 024c 8bc2 - - 0x000001814d85227c: ; {metadata(method data for {method} {0x0000018163cd43f0} 'invoke' '(Ljava/lang/foreign/SegmentAllocator;Ljava/lang/foreign/MemorySegment;JJ)I' in 'jdk/internal/foreign/abi/DowncallStub+0x000000000f160000')} - 0x000001814d85227c: 49b9 0090 | 2064 8101 - - 0x000001814d852284: ; {metadata('jdk/internal/foreign/NativeMemorySegmentImpl')} - 0x000001814d852284: 0000 49ba | 98fc 020f | 0000 0000 | 4d89 9130 | 0300 0049 | 8381 3803 | 0000 014c - - 0x000001814d8522a0: ; {metadata(method data for {method} {0x0000018163cd43f0} 'invoke' '(Ljava/lang/foreign/SegmentAllocator;Ljava/lang/foreign/MemorySegment;JJ)I' in 'jdk/internal/foreign/abi/DowncallStub+0x000000000f160000')} - 0x000001814d8522a0: 8b42 2048 | ba00 9020 | 6481 0100 | 0048 8382 | 4804 0000 - - 0x000001814d8522b4: ; {metadata(method data for {method} {0x0000018163a3b2b8} 'invokeExact_MT' '(Ljava/lang/Object;JJJLjava/lang/Object;)I' in 'java/lang/invoke/LambdaForm$MH+0x000000000f125800')} - 0x000001814d8522b4: 0148 ba00 | 1020 6481 | 0100 0044 | 8b8a 9000 | 0000 4183 | c102 4489 | 8a90 0000 | 0041 81e1 - 0x000001814d8522d4: feff 1f00 | 4585 c90f | 846b 0d00 - - 0x000001814d8522e0: ; {metadata(method data for {method} {0x0000018163a3b2b8} 'invokeExact_MT' '(Ljava/lang/Object;JJJLjava/lang/Object;)I' in 'java/lang/invoke/LambdaForm$MH+0x000000000f125800')} - 0x000001814d8522e0: 0048 ba00 | 1020 6481 | 0100 0048 | 8382 f801 - - 0x000001814d8522f0: ; {metadata(method data for {method} {0x000000000e47d768} 'checkExactType' '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)V' in 'java/lang/invoke/Invokers')} - 0x000001814d8522f0: 0000 0148 | ba28 5032 | 6381 0100 | 0044 8b8a | 9000 0000 | 4183 c102 | 4489 8a90 | 0000 0041 - 0x000001814d852310: 81e1 feff | 1f00 4585 | c90f 844e - - 0x000001814d85231c: ; {oop(a 'java/lang/invoke/NativeMethodHandle'{0x000000074f9fcd48})} - 0x000001814d85231c: 0d00 0048 | ba48 cd9f | 4f07 0000 - - 0x000001814d852328: ; {metadata(method data for {method} {0x000000000e47d768} 'checkExactType' '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)V' in 'java/lang/invoke/Invokers')} - 0x000001814d852328: 0049 b928 | 5032 6381 | 0100 008b | 5208 41ba | 0000 000e | 4903 d249 | 3b91 e000 | 0000 750d - 0x000001814d852348: 4983 81e8 | 0000 0001 | e9aa 0100 | 0049 3b91 | f000 0000 | 750d 4983 | 81f8 0000 | 0001 e994 - 0x000001814d852368: 0100 0049 | 3b91 0001 | 0000 750d | 4983 8108 | 0100 0001 | e97e 0100 | 0049 3b91 | 1001 0000 - 0x000001814d852388: 750d 4983 | 8118 0100 | 0001 e968 | 0100 0049 | 3b91 2001 | 0000 750d | 4983 8128 | 0100 0001 - 0x000001814d8523a8: e952 0100 | 0049 3b91 | 3001 0000 | 750d 4983 | 8138 0100 | 0001 e93c | 0100 0049 | 3b91 4001 - 0x000001814d8523c8: 0000 750d | 4983 8148 | 0100 0001 | e926 0100 | 0049 3b91 | 5001 0000 | 750d 4983 | 8158 0100 - 0x000001814d8523e8: 0001 e910 | 0100 0049 | 83b9 e000 | 0000 0075 | 1749 8991 | e000 0000 | 49c7 81e8 | 0000 0001 - 0x000001814d852408: 0000 00e9 | ef00 0000 | 4983 b9f0 | 0000 0000 | 7517 4989 | 91f0 0000 | 0049 c781 | f800 0000 - 0x000001814d852428: ; {other} - 0x000001814d852428: 0100 0000 | e9ce 0000 | 0049 83b9 | 0001 0000 | 0075 1749 | 8991 0001 | 0000 49c7 | 8108 0100 - 0x000001814d852448: 0001 0000 | 00e9 ad00 | 0000 4983 | b910 0100 | 0000 7517 | 4989 9110 | 0100 0049 | c781 1801 - 0x000001814d852468: 0000 0100 | 0000 e98c | 0000 0049 | 83b9 2001 | 0000 0075 | 1749 8991 | 2001 0000 | 49c7 8128 - 0x000001814d852488: 0100 0001 | 0000 00e9 | 6b00 0000 | 4983 b930 | 0100 0000 | 7517 4989 | 9130 0100 | 0049 c781 - 0x000001814d8524a8: 3801 0000 | 0100 0000 | e94a 0000 | 0049 83b9 | 4001 0000 | 0075 1749 | 8991 4001 | 0000 49c7 - 0x000001814d8524c8: 8148 0100 | 0001 0000 | 00e9 2900 | 0000 4983 | b950 0100 | 0000 7517 | 4989 9150 | 0100 0049 - 0x000001814d8524e8: c781 5801 | 0000 0100 | 0000 e908 | 0000 0049 | 8381 d800 - - 0x000001814d8524fc: ; {metadata(method data for {method} {0x000000000e47d768} 'checkExactType' '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)V' in 'java/lang/invoke/Invokers')} - 0x000001814d8524fc: 0000 0148 | ba28 5032 | 6381 0100 | 00ff 8268 - - 0x000001814d85250c: ; {metadata(method data for {method} {0x0000018163a3b2b8} 'invokeExact_MT' '(Ljava/lang/Object;JJJLjava/lang/Object;)I' in 'java/lang/invoke/LambdaForm$MH+0x000000000f125800')} - 0x000001814d85250c: 0100 0048 | ba00 1020 | 6481 0100 | 0048 8382 | 0802 0000 - - 0x000001814d852520: ; {metadata(method data for {method} {0x000000000e47d660} 'checkCustomized' '(Ljava/lang/invoke/MethodHandle;)V' in 'java/lang/invoke/Invokers')} - 0x000001814d852520: 0148 bab8 | b731 6381 | 0100 0044 | 8b8a 9000 | 0000 4183 | c102 4489 | 8a90 0000 | 0041 81e1 - 0x000001814d852540: feff 1f00 | 4585 c90f | 8441 0b00 - - 0x000001814d85254c: ; {metadata(method data for {method} {0x000000000e47d660} 'checkCustomized' '(Ljava/lang/invoke/MethodHandle;)V' in 'java/lang/invoke/Invokers')} - 0x000001814d85254c: 0048 bab8 | b731 6381 | 0100 0048 | 8382 d800 - - 0x000001814d85255c: ; {metadata(method data for {method} {0x000000000e1ff700} 'isCompileConstant' '(Ljava/lang/Object;)Z' in 'java/lang/invoke/MethodHandleImpl')} - 0x000001814d85255c: 0000 0148 | ba20 b931 | 6381 0100 | 0044 8b8a | 9000 0000 | 4183 c102 | 4489 8a90 | 0000 0041 - 0x000001814d85257c: 81e1 feff | 1f00 4585 | c90f 8424 - - 0x000001814d852588: ; {metadata(method data for {method} {0x000000000e47d660} 'checkCustomized' '(Ljava/lang/invoke/MethodHandle;)V' in 'java/lang/invoke/Invokers')} - 0x000001814d852588: 0b00 0048 | bab8 b731 | 6381 0100 | 00ff 82e8 - - 0x000001814d852598: ; {metadata(method data for {method} {0x000000000e47d660} 'checkCustomized' '(Ljava/lang/invoke/MethodHandle;)V' in 'java/lang/invoke/Invokers')} - 0x000001814d852598: 0000 0048 | bab8 b731 | 6381 0100 | 00ff 8208 - - 0x000001814d8525a8: ; {metadata(method data for {method} {0x0000018163a3b2b8} 'invokeExact_MT' '(Ljava/lang/Object;JJJLjava/lang/Object;)I' in 'java/lang/invoke/LambdaForm$MH+0x000000000f125800')} - 0x000001814d8525a8: 0100 0048 | ba00 1020 | 6481 0100 | 0048 8382 | 1802 0000 - - 0x000001814d8525bc: ; {metadata(method data for {method} {0x00000181641702d8} 'invoke' '(Ljava/lang/Object;JJJ)I' in 'java/lang/invoke/LambdaForm$MH+0x000000000f1ef800')} - 0x000001814d8525bc: 0148 ba80 | 0517 6481 | 0100 0044 | 8b8a 9000 | 0000 4183 | c102 4489 | 8a90 0000 | 0041 81e1 - 0x000001814d8525dc: feff 1f00 | 4585 c90f | 84e7 0a00 - - 0x000001814d8525e8: ; {metadata(method data for {method} {0x00000181641702d8} 'invoke' '(Ljava/lang/Object;JJJ)I' in 'java/lang/invoke/LambdaForm$MH+0x000000000f1ef800')} - 0x000001814d8525e8: 0048 ba80 | 0517 6481 | 0100 0048 | 8382 d800 - - 0x000001814d8525f8: ; {metadata(method data for {method} {0x00000181632d6f00} 'internalNativeEntryPoint' '(Ljava/lang/Object;)Ljava/lang/Object;' in 'java/lang/invoke/NativeMethodHandle')} - 0x000001814d8525f8: 0000 0148 | ba78 c97e | 6381 0100 | 0044 8b8a | 9000 0000 | 4183 c102 | 4489 8a90 | 0000 0041 - 0x000001814d852618: 81e1 feff | 1f00 4585 | c90f 84ca - - 0x000001814d852624: ; {metadata(method data for {method} {0x00000181641702d8} 'invoke' '(Ljava/lang/Object;JJJ)I' in 'java/lang/invoke/LambdaForm$MH+0x000000000f1ef800')} - 0x000001814d852624: 0a00 0048 | ba80 0517 | 6481 0100 | 0048 8382 | e800 0000 | 0149 8bd0 | 4c8b 8424 | c801 0000 - 0x000001814d852644: 4c8b 8c24 | d001 0000 - - 0x000001814d85264c: ; {oop(a 'jdk/internal/foreign/abi/NativeEntryPoint'{0x000000074cb6aa48})} - 0x000001814d85264c: 48bf 48aa | b64c 0700 - - 0x000001814d852654: ; {static_call} - 0x000001814d852654: 0000 90e8 - - 0x000001814d852658: ; ImmutableOopMap {[488]=Oop } - ;*invokestatic linkToNative {reexecute=0 rethrow=0 return_oop=0} - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef800::invoke@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125800::invokeExact_MT@23 - ; - jdk.internal.foreign.abi.DowncallStub/0x000000000f160000::invoke@52 - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852658: a44c f906 - - 0x000001814d85265c: ; {post_call_nop} - 0x000001814d85265c: 0f1f 8400 | 5423 0007 | 488b b424 | e801 0000 - - 0x000001814d85266c: ; {oop(a 'jdk/internal/foreign/abi/SharedUtils$1'{0x000000074cb796d8})} - 0x000001814d85266c: 48ba d896 | b74c 0700 - - 0x000001814d852674: ; {metadata(method data for {method} {0x0000018163cd43f0} 'invoke' '(Ljava/lang/foreign/SegmentAllocator;Ljava/lang/foreign/MemorySegment;JJ)I' in 'jdk/internal/foreign/abi/DowncallStub+0x000000000f160000')} - 0x000001814d852674: 0000 48bf | 0090 2064 | 8101 0000 - - 0x000001814d852680: ; {metadata('jdk/internal/foreign/abi/SharedUtils$1')} - 0x000001814d852680: 49ba 78fb | 030f 0000 | 0000 4c89 | 9770 0500 | 0048 8387 | 7805 0000 - - 0x000001814d852698: ; {metadata(method data for {method} {0x00000181633cc398} 'close' '()V' in 'jdk/internal/foreign/abi/SharedUtils$1')} - 0x000001814d852698: 0148 bab8 | d17e 6381 | 0100 008b | ba90 0000 | 0083 c702 | 89ba 9000 | 0000 81e7 | feff 1f00 - 0x000001814d8526b8: 85ff 0f84 | 520a 0000 - - 0x000001814d8526c0: ; {metadata(method data for {method} {0x0000018163cd43f0} 'invoke' '(Ljava/lang/foreign/SegmentAllocator;Ljava/lang/foreign/MemorySegment;JJ)I' in 'jdk/internal/foreign/abi/DowncallStub+0x000000000f160000')} - 0x000001814d8526c0: 4885 f648 | ba00 9020 | 6481 0100 | 00bf f805 | 0000 7405 | bf08 0600 | 0048 8b1c | 3a48 8d5b - 0x000001814d8526e0: 0148 891c | 3a89 8424 | f001 0000 | 0f84 9e02 | 0000 488b - - 0x000001814d8526f4: ; {metadata(method data for {method} {0x0000018163cd43f0} 'invoke' '(Ljava/lang/foreign/SegmentAllocator;Ljava/lang/foreign/MemorySegment;JJ)I' in 'jdk/internal/foreign/abi/DowncallStub+0x000000000f160000')} - 0x000001814d8526f4: d648 bf00 | 9020 6481 | 0100 008b | 5208 41ba | 0000 000e | 4903 d248 | 3b97 2006 | 0000 750d - 0x000001814d852714: 4883 8728 | 0600 0001 | e9aa 0100 | 0048 3b97 | 3006 0000 | 750d 4883 | 8738 0600 | 0001 e994 - 0x000001814d852734: 0100 0048 | 3b97 4006 | 0000 750d | 4883 8748 | 0600 0001 | e97e 0100 | 0048 3b97 | 5006 0000 - 0x000001814d852754: 750d 4883 | 8758 0600 | 0001 e968 | 0100 0048 | 3b97 6006 | 0000 750d | 4883 8768 | 0600 0001 - 0x000001814d852774: e952 0100 | 0048 3b97 | 7006 0000 | 750d 4883 | 8778 0600 | 0001 e93c | 0100 0048 | 3b97 8006 - 0x000001814d852794: 0000 750d | 4883 8788 | 0600 0001 | e926 0100 | 0048 3b97 | 9006 0000 | 750d 4883 | 8798 0600 - 0x000001814d8527b4: 0001 e910 | 0100 0048 | 83bf 2006 | 0000 0075 | 1748 8997 | 2006 0000 | 48c7 8728 | 0600 0001 - 0x000001814d8527d4: 0000 00e9 | ef00 0000 | 4883 bf30 | 0600 0000 | 7517 4889 | 9730 0600 | 0048 c787 | 3806 0000 - 0x000001814d8527f4: ; {other} - 0x000001814d8527f4: 0100 0000 | e9ce 0000 | 0048 83bf | 4006 0000 | 0075 1748 | 8997 4006 | 0000 48c7 | 8748 0600 - 0x000001814d852814: 0001 0000 | 00e9 ad00 | 0000 4883 | bf50 0600 | 0000 7517 | 4889 9750 | 0600 0048 | c787 5806 - 0x000001814d852834: 0000 0100 | 0000 e98c | 0000 0048 | 83bf 6006 | 0000 0075 | 1748 8997 | 6006 0000 | 48c7 8768 - 0x000001814d852854: 0600 0001 | 0000 00e9 | 6b00 0000 | 4883 bf70 | 0600 0000 | 7517 4889 | 9770 0600 | 0048 c787 - 0x000001814d852874: 7806 0000 | 0100 0000 | e94a 0000 | 0048 83bf | 8006 0000 | 0075 1748 | 8997 8006 | 0000 48c7 - 0x000001814d852894: 8788 0600 | 0001 0000 | 00e9 2900 | 0000 4883 | bf90 0600 | 0000 7517 | 4889 9790 | 0600 0048 - 0x000001814d8528b4: c787 9806 | 0000 0100 | 0000 e908 | 0000 0048 | 8387 1806 | 0000 0148 | 8bd6 0f1f | 8000 0000 - 0x000001814d8528d4: 0048 b830 | b1be 2b81 - - 0x000001814d8528dc: ; {virtual_call} - 0x000001814d8528dc: 0100 00e8 - - 0x000001814d8528e0: ; ImmutableOopMap {} - ;*invokevirtual release0 {reexecute=0 rethrow=0 return_oop=0} - ; - jdk.internal.foreign.abi.DowncallStub/0x000000000f160000::invoke@76 - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d8528e0: 2e21 ff06 - - 0x000001814d8528e4: ; {post_call_nop} - 0x000001814d8528e4: 0f1f 8400 | dc25 0008 | e99f 0000 | 0049 8b87 | 8805 0000 | 4d33 d24d | 8997 8805 | 0000 4d33 - 0x000001814d852904: d24d 8997 | 9005 0000 - - 0x000001814d85290c: ; {oop(a 'jdk/internal/foreign/abi/SharedUtils$1'{0x000000074cb796d8})} - 0x000001814d85290c: 48be d896 | b74c 0700 - - 0x000001814d852914: ; {metadata(method data for {method} {0x0000018163cd43f0} 'invoke' '(Ljava/lang/foreign/SegmentAllocator;Ljava/lang/foreign/MemorySegment;JJ)I' in 'jdk/internal/foreign/abi/DowncallStub+0x000000000f160000')} - 0x000001814d852914: 0000 48bf | 0090 2064 | 8101 0000 - - 0x000001814d852920: ; {metadata('jdk/internal/foreign/abi/SharedUtils$1')} - 0x000001814d852920: 49ba 78fb | 030f 0000 | 0000 4c89 | 9740 0700 | 0048 8387 | 4807 0000 - - 0x000001814d852938: ; {metadata(method data for {method} {0x00000181633cc398} 'close' '()V' in 'jdk/internal/foreign/abi/SharedUtils$1')} - 0x000001814d852938: 0148 beb8 | d17e 6381 | 0100 008b | be90 0000 | 0083 c702 | 89be 9000 | 0000 81e7 | feff 1f00 - 0x000001814d852958: 85ff 0f84 | d307 0000 - - 0x000001814d852960: ; {metadata(method data for {method} {0x0000018163cd43f0} 'invoke' '(Ljava/lang/foreign/SegmentAllocator;Ljava/lang/foreign/MemorySegment;JJ)I' in 'jdk/internal/foreign/abi/DowncallStub+0x000000000f160000')} - 0x000001814d852960: 4885 d248 | be00 9020 | 6481 0100 | 00bf c807 | 0000 7405 | bfd8 0700 | 0048 8b1c | 3e48 8d5b - 0x000001814d852980: 0148 891c | 3e0f 8429 | 0200 00e9 | 1a00 0000 | 8b84 24f0 | 0100 0048 | 81c4 2002 - - 0x000001814d85299c: ; {poll_return} - 0x000001814d85299c: 0000 5d49 | 3b67 280f | 87ab 0700 | 00c3 4889 | 8424 f801 | 0000 483b | 0248 8bf2 - - 0x000001814d8529b8: ; {metadata(method data for {method} {0x0000018163cd43f0} 'invoke' '(Ljava/lang/foreign/SegmentAllocator;Ljava/lang/foreign/MemorySegment;JJ)I' in 'jdk/internal/foreign/abi/DowncallStub+0x000000000f160000')} - 0x000001814d8529b8: 48bf 0090 | 2064 8101 | 0000 8b76 | 0841 ba00 | 0000 0e49 | 03f2 483b | b7f0 0700 | 0075 0d48 - 0x000001814d8529d8: 8387 f807 | 0000 01e9 | aa01 0000 | 483b b700 | 0800 0075 | 0d48 8387 | 0808 0000 | 01e9 9401 - 0x000001814d8529f8: 0000 483b | b710 0800 | 0075 0d48 | 8387 1808 | 0000 01e9 | 7e01 0000 | 483b b720 | 0800 0075 - 0x000001814d852a18: 0d48 8387 | 2808 0000 | 01e9 6801 | 0000 483b | b730 0800 | 0075 0d48 | 8387 3808 | 0000 01e9 - 0x000001814d852a38: 5201 0000 | 483b b740 | 0800 0075 | 0d48 8387 | 4808 0000 | 01e9 3c01 | 0000 483b | b750 0800 - 0x000001814d852a58: 0075 0d48 | 8387 5808 | 0000 01e9 | 2601 0000 | 483b b760 | 0800 0075 | 0d48 8387 | 6808 0000 - 0x000001814d852a78: 01e9 1001 | 0000 4883 | bff0 0700 | 0000 7517 | 4889 b7f0 | 0700 0048 | c787 f807 | 0000 0100 - 0x000001814d852a98: 0000 e9ef | 0000 0048 | 83bf 0008 | 0000 0075 | 1748 89b7 | 0008 0000 | 48c7 8708 - - 0x000001814d852ab4: ; {other} - 0x000001814d852ab4: 0800 0001 | 0000 00e9 | ce00 0000 | 4883 bf10 | 0800 0000 | 7517 4889 | b710 0800 | 0048 c787 - 0x000001814d852ad4: 1808 0000 | 0100 0000 | e9ad 0000 | 0048 83bf | 2008 0000 | 0075 1748 | 89b7 2008 | 0000 48c7 - 0x000001814d852af4: 8728 0800 | 0001 0000 | 00e9 8c00 | 0000 4883 | bf30 0800 | 0000 7517 | 4889 b730 | 0800 0048 - 0x000001814d852b14: c787 3808 | 0000 0100 | 0000 e96b | 0000 0048 | 83bf 4008 | 0000 0075 | 1748 89b7 | 4008 0000 - 0x000001814d852b34: 48c7 8748 | 0800 0001 | 0000 00e9 | 4a00 0000 | 4883 bf50 | 0800 0000 | 7517 4889 | b750 0800 - 0x000001814d852b54: 0048 c787 | 5808 0000 | 0100 0000 | e929 0000 | 0048 83bf | 6008 0000 | 0075 1748 | 89b7 6008 - 0x000001814d852b74: 0000 48c7 | 8768 0800 | 0001 0000 | 00e9 0800 | 0000 4883 | 87e8 0700 | 0001 0f1f | 8000 0000 - 0x000001814d852b94: 0048 b858 | b1be 2b81 - - 0x000001814d852b9c: ; {virtual_call} - 0x000001814d852b9c: 0100 00e8 - - 0x000001814d852ba0: ; ImmutableOopMap {[504]=Oop } - ;*invokevirtual release0 {reexecute=0 rethrow=0 return_oop=0} - ; - jdk.internal.foreign.abi.DowncallStub/0x000000000f160000::invoke@97 - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852ba0: 3ccb 9006 - - 0x000001814d852ba4: ; {post_call_nop} - 0x000001814d852ba4: 0f1f 8400 | 9c28 0009 | 488b 8424 | f801 0000 | e976 0600 | 004c 8b84 | 24c0 0100 - - 0x000001814d852bc0: ; {oop(""{0x00000007ffe044d8})} - 0x000001814d852bc0: 0048 bed8 | 44e0 ff07 | 0000 00e9 | 9400 0000 - - 0x000001814d852bd0: ; {metadata('java/lang/String')} - 0x000001814d852bd0: 48ba 2884 | 180e 0000 | 0000 498b | 87c8 0100 | 0048 8d78 | 1849 3bbf | d801 0000 | 0f87 7d05 - 0x000001814d852bf0: 0000 4989 | bfc8 0100 | 0048 c700 | 0100 0000 | 488b ca41 | ba00 0000 | 0e49 2bca | 8948 0848 - 0x000001814d852c10: 33c9 8948 | 0c48 33c9 | 4889 4810 - - 0x000001814d852c1c: ; {metadata(method data for {method} {0x000000000e1c8158} 'toString' '()Ljava/lang/String;' in 'java/lang/StringBuilder')} - 0x000001814d852c1c: 4c8b c848 | bae8 5e01 | 6381 0100 | 0048 8382 | 8801 0000 | 014c 8bc3 - - 0x000001814d852c34: ; {oop(nullptr)} - 0x000001814d852c34: 49b9 0000 | 0000 0000 | 0000 488b | d048 8984 | 2400 0200 | 0066 0f1f - - 0x000001814d852c4c: ; {optimized virtual_call} - 0x000001814d852c4c: 4400 00e8 - - 0x000001814d852c50: ; ImmutableOopMap {[448]=Oop [480]=Oop [512]=Oop } - ;*invokespecial {reexecute=0 rethrow=0 return_oop=0} - ; - java.lang.StringBuilder::toString@16 (line 478) - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@38 (line 373) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852c50: 8cc5 9006 - - 0x000001814d852c54: ; {post_call_nop} - 0x000001814d852c54: 0f1f 8400 | 4c29 000a | 488b b424 | 0002 0000 | 488b 8424 | e001 0000 - - 0x000001814d852c6c: ; {metadata(method data for {method} {0x00000181632a9710} 'checkSymbol' '(Ljava/lang/foreign/MemorySegment;)V' in 'jdk/internal/foreign/abi/SharedUtils')} - 0x000001814d852c6c: 4c8b c048 | ba00 c17e | 6381 0100 | 0048 8382 | 5803 0000 | 014c 8bc6 - - 0x000001814d852c84: ; {optimized virtual_call} - 0x000001814d852c84: 488b d0e8 - - 0x000001814d852c88: ; ImmutableOopMap {[448]=Oop [480]=Oop } - ;*invokespecial {reexecute=0 rethrow=0 return_oop=0} - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@41 (line 373) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852c88: 54c5 9006 - - 0x000001814d852c8c: ; {post_call_nop} - 0x000001814d852c8c: 0f1f 8400 | 8429 000b | 488b 8424 | e001 0000 | e98e 0500 | 000f 1f80 | 0000 0000 - - 0x000001814d852ca8: ; {other} - 0x000001814d852ca8: e9de 0400 | 0000 0000 | 0000 498b | 87c8 0100 | 0048 8d78 | 3049 3bbf | d801 0000 | 0f87 cb04 - 0x000001814d852cc8: 0000 4989 | bfc8 0100 | 0048 c700 | 0100 0000 | 488b ca41 | ba00 0000 | 0e49 2bca | 8948 0848 - 0x000001814d852ce8: 33c9 8948 | 0c48 33c9 | 4889 4810 | 4889 4818 | 4889 4820 | 4889 4828 - - 0x000001814d852d00: ; {metadata(method data for {method} {0x000000000e45b4c8} 'requireNonNull' '(Ljava/lang/Object;)Ljava/lang/Object;' in 'java/util/Objects')} - 0x000001814d852d00: 488b d048 | bec8 2f01 | 6381 0100 | 0048 8386 | f800 0000 | 0148 8bd0 | 4889 8424 | 0802 0000 - 0x000001814d852d20: 0f1f 8000 - - 0x000001814d852d24: ; {optimized virtual_call} - 0x000001814d852d24: 0000 00e8 - - 0x000001814d852d28: ; ImmutableOopMap {[448]=Oop [520]=Oop } - ;*invokespecial {reexecute=0 rethrow=0 return_oop=0} - ; - java.util.Objects::requireNonNull@8 (line 220) - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@1 (line 371) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852d28: b4c4 9006 - - 0x000001814d852d2c: ; {post_call_nop} - 0x000001814d852d2c: 0f1f 8400 | 242a 000c | 488b 8424 | 0802 0000 | e9ee 0400 - - 0x000001814d852d40: ; {metadata({method} {0x00000181636545e0} 'callPPI' '(Ljava/lang/foreign/MemorySegment;JJ)I' in 'org/lwjgl/system/JNIBindingsImpl+0x000000000f070000')} - 0x000001814d852d40: 0049 bad8 | 4565 6381 | 0100 004c | 8954 2408 | 48c7 0424 | ffff ffff - - 0x000001814d852d58: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d852d58: e883 ee9e - - 0x000001814d852d5c: ; ImmutableOopMap {rdx=Oop r8=Oop [448]=Oop } - ;*synchronization entry - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@-1 - 0x000001814d852d5c: 06e9 1cd7 - - 0x000001814d852d60: ; {metadata({method} {0x0000018163a3a2b8} 'invokeExact_MT' '(Ljava/lang/Object;Ljava/lang/Object;JJLjava/lang/Object;)I' in 'java/lang/invoke/LambdaForm$MH+0x000000000f125000')} - 0x000001814d852d60: ffff 49ba | b0a2 a363 | 8101 0000 | 4c89 5424 | 0848 c704 | 24ff ffff - - 0x000001814d852d78: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d852d78: ffe8 62ee - - 0x000001814d852d7c: ; ImmutableOopMap {r8=Oop [448]=Oop } - ;*synchronization entry - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@-1 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852d7c: 9e06 e934 - - 0x000001814d852d80: ; {metadata({method} {0x000000000e47d768} 'checkExactType' '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)V' in 'java/lang/invoke/Invokers')} - 0x000001814d852d80: d7ff ff49 | ba60 d747 | 0e00 0000 | 004c 8954 | 2408 48c7 | 0424 ffff - - 0x000001814d852d98: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d852d98: ffff e841 - - 0x000001814d852d9c: ; ImmutableOopMap {r8=Oop [448]=Oop } - ;*synchronization entry - ; - java.lang.invoke.Invokers::checkExactType@-1 (line 529) - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@11 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852d9c: ee9e 06e9 | 4cd7 ffff - - 0x000001814d852da4: ; {metadata({method} {0x000000000e47d660} 'checkCustomized' '(Ljava/lang/invoke/MethodHandle;)V' in 'java/lang/invoke/Invokers')} - 0x000001814d852da4: 49ba 58d6 | 470e 0000 | 0000 4c89 | 5424 0848 | c704 24ff - - 0x000001814d852db8: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d852db8: ffff ffe8 - - 0x000001814d852dbc: ; ImmutableOopMap {r8=Oop [448]=Oop } - ;*synchronization entry - ; - java.lang.invoke.Invokers::checkCustomized@-1 (line 622) - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@15 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852dbc: 20ee 9e06 | e954 d9ff - - 0x000001814d852dc4: ; {metadata({method} {0x000000000e1ff700} 'isCompileConstant' '(Ljava/lang/Object;)Z' in 'java/lang/invoke/MethodHandleImpl')} - 0x000001814d852dc4: ff49 baf8 | f61f 0e00 | 0000 004c | 8954 2408 | 48c7 0424 | ffff ffff - - 0x000001814d852ddc: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d852ddc: e8ff ed9e - - 0x000001814d852de0: ; ImmutableOopMap {r8=Oop [448]=Oop } - ;*synchronization entry - ; - java.lang.invoke.MethodHandleImpl::isCompileConstant@-1 (line 625) - ; - java.lang.invoke.Invokers::checkCustomized@1 (line 622) - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@15 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852de0: 06e9 6cd9 - - 0x000001814d852de4: ; {metadata({method} {0x000001816415db40} 'invoke' '(Ljava/lang/Object;Ljava/lang/Object;JJ)I' in 'java/lang/invoke/LambdaForm$MH+0x000000000f1ef400')} - 0x000001814d852de4: ffff 49ba | 38db 1564 | 8101 0000 | 4c89 5424 | 0848 c704 | 24ff ffff - - 0x000001814d852dfc: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d852dfc: ffe8 deed - - 0x000001814d852e00: ; ImmutableOopMap {r8=Oop [448]=Oop } - ;*synchronization entry - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@-1 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852e00: 9e06 e9a4 - - 0x000001814d852e04: ; {metadata({method} {0x00000181634b0288} 'invokeStatic' '(Ljava/lang/Object;Ljava/lang/Object;)V' in 'java/lang/invoke/LambdaForm$DMH+0x000000000f04c800')} - 0x000001814d852e04: d9ff ff49 | ba80 024b | 6381 0100 | 004c 8954 | 2408 48c7 | 0424 ffff - - 0x000001814d852e1c: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d852e1c: ffff e8bd - - 0x000001814d852e20: ; ImmutableOopMap {r8=Oop [448]=Oop } - ;*synchronization entry - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@-1 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852e20: ed9e 06e9 | bcd9 ffff - - 0x000001814d852e28: ; {metadata({method} {0x000000000e206b80} 'internalMemberName' '(Ljava/lang/Object;)Ljava/lang/Object;' in 'java/lang/invoke/DirectMethodHandle')} - 0x000001814d852e28: 49ba 786b | 200e 0000 | 0000 4c89 | 5424 0848 | c704 24ff - - 0x000001814d852e3c: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d852e3c: ffff ffe8 - - 0x000001814d852e40: ; ImmutableOopMap {r8=Oop [448]=Oop } - ;*synchronization entry - ; - java.lang.invoke.DirectMethodHandle::internalMemberName@-1 (line 326) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@1 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852e40: 9ced 9e06 | e9d4 d9ff - - 0x000001814d852e48: ; {metadata({method} {0x00000181632a9710} 'checkSymbol' '(Ljava/lang/foreign/MemorySegment;)V' in 'jdk/internal/foreign/abi/SharedUtils')} - 0x000001814d852e48: ff49 ba08 | 972a 6381 | 0100 004c | 8954 2408 | 48c7 0424 | ffff ffff - - 0x000001814d852e60: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d852e60: e87b ed9e - - 0x000001814d852e64: ; ImmutableOopMap {r8=Oop [448]=Oop } - ;*synchronization entry - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@-1 (line 371) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852e64: 06e9 ecd9 - - 0x000001814d852e68: ; {metadata({method} {0x000000000e45b4c8} 'requireNonNull' '(Ljava/lang/Object;)Ljava/lang/Object;' in 'java/util/Objects')} - 0x000001814d852e68: ffff 49ba | c0b4 450e | 0000 0000 | 4c89 5424 | 0848 c704 | 24ff ffff - - 0x000001814d852e80: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d852e80: ffe8 5aed - - 0x000001814d852e84: ; ImmutableOopMap {r8=Oop [448]=Oop } - ;*synchronization entry - ; - java.util.Objects::requireNonNull@-1 (line 219) - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@1 (line 371) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852e84: 9e06 e904 - - 0x000001814d852e88: ; {runtime_call C1 Runtime throw_incompatible_class_change_error_blob} - 0x000001814d852e88: daff ffe8 - - 0x000001814d852e8c: ; ImmutableOopMap {r8=Oop [448]=Oop } - ;*invokeinterface equals {reexecute=0 rethrow=0 return_oop=0} - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@9 (line 372) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852e8c: d0b1 9e06 - - 0x000001814d852e90: ; {runtime_call C1 Runtime throw_null_pointer_exception_blob} - 0x000001814d852e90: e8cb 769e - - 0x000001814d852e94: ; ImmutableOopMap {r8=Oop [448]=Oop } - ;*invokeinterface equals {reexecute=0 rethrow=0 return_oop=0} - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@9 (line 372) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - ; {metadata(nullptr)} - 0x000001814d852e94: 0648 ba00 | 0000 0000 | 0000 00b8 | 000f 050a - - 0x000001814d852ea4: ; {runtime_call C1 Runtime load_klass_patching_blob} - 0x000001814d852ea4: e8b7 d69e - - 0x000001814d852ea8: ; ImmutableOopMap {[448]=Oop } - ;*new {reexecute=1 rethrow=0 return_oop=0} - ; - (reexecute) jdk.internal.foreign.abi.SharedUtils::checkSymbol@17 (line 373) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852ea8: 06e9 6adc | ffff 488b - - 0x000001814d852eb0: ; {runtime_call C1 Runtime fast_new_instance_blob} - 0x000001814d852eb0: d2e8 aa85 - - 0x000001814d852eb4: ; ImmutableOopMap {[448]=Oop } - ;*new {reexecute=0 rethrow=0 return_oop=0} - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@17 (line 373) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852eb4: 9e06 e9b1 - - 0x000001814d852eb8: ; {metadata(nullptr)} - 0x000001814d852eb8: dcff ff48 | ba00 0000 | 0000 0000 | 00b8 000f - - 0x000001814d852ec8: ; {runtime_call C1 Runtime load_klass_patching_blob} - 0x000001814d852ec8: 050a e891 - - 0x000001814d852ecc: ; ImmutableOopMap {rax=Oop [448]=Oop [480]=Oop } - ;*new {reexecute=1 rethrow=0 return_oop=0} - ; - (reexecute) jdk.internal.foreign.abi.SharedUtils::checkSymbol@21 (line 373) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852ecc: d69e 06e9 | a4dc ffff - - 0x000001814d852ed4: ; {runtime_call C1 Runtime fast_new_instance_blob} - 0x000001814d852ed4: 488b d2e8 - - 0x000001814d852ed8: ; ImmutableOopMap {[448]=Oop [480]=Oop } - ;*new {reexecute=0 rethrow=0 return_oop=0} - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@21 (line 373) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852ed8: 8485 9e06 | e9e3 dcff - - 0x000001814d852ee0: ; {metadata({method} {0x000000000e1c96b8} '' '()V' in 'java/lang/StringBuilder')} - 0x000001814d852ee0: ff49 bab0 | 961c 0e00 | 0000 004c | 8954 2408 | 48c7 0424 | ffff ffff - - 0x000001814d852ef8: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d852ef8: e8e3 ec9e - - 0x000001814d852efc: ; ImmutableOopMap {rax=Oop [448]=Oop [480]=Oop } - ;*synchronization entry - ; - java.lang.StringBuilder::@-1 (line 106) - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@25 (line 373) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852efc: 06e9 fedc - - 0x000001814d852f00: ; {metadata({method} {0x000000000e1c98c8} 'append' '(Ljava/lang/String;)Ljava/lang/StringBuilder;' in 'java/lang/StringBuilder')} - 0x000001814d852f00: ffff 49ba | c098 1c0e | 0000 0000 | 4c89 5424 | 0848 c704 | 24ff ffff - - 0x000001814d852f18: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d852f18: ffe8 c2ec - - 0x000001814d852f1c: ; ImmutableOopMap {[448]=Oop [472]=Oop [480]=Oop } - ;*synchronization entry - ; - java.lang.StringBuilder::append@-1 (line 179) - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@31 (line 373) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852f1c: 9e06 e918 - - 0x000001814d852f20: ; {metadata({method} {0x000000000e1c9870} 'append' '(Ljava/lang/Object;)Ljava/lang/StringBuilder;' in 'java/lang/StringBuilder')} - 0x000001814d852f20: dfff ff49 | ba68 981c | 0e00 0000 | 004c 8954 | 2408 48c7 | 0424 ffff - - 0x000001814d852f38: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d852f38: ffff e8a1 - - 0x000001814d852f3c: ; ImmutableOopMap {[448]=Oop [472]=Oop [480]=Oop } - ;*synchronization entry - ; - java.lang.StringBuilder::append@-1 (line 173) - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@35 (line 373) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852f3c: ec9e 06e9 | 35e1 ffff - - 0x000001814d852f44: ; {metadata({method} {0x000000000e4b0248} 'valueOf' '(Ljava/lang/Object;)Ljava/lang/String;' in 'java/lang/String')} - 0x000001814d852f44: 49ba 4002 | 4b0e 0000 | 0000 4c89 | 5424 0848 | c704 24ff - - 0x000001814d852f58: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d852f58: ffff ffe8 - - 0x000001814d852f5c: ; ImmutableOopMap {[448]=Oop [472]=Oop [480]=Oop } - ;*synchronization entry - ; - java.lang.String::valueOf@-1 (line 4530) - ; - java.lang.StringBuilder::append@2 (line 173) - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@35 (line 373) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852f5c: 80ec 9e06 | e94d e1ff - - 0x000001814d852f64: ; {metadata({method} {0x000000000e1c98c8} 'append' '(Ljava/lang/String;)Ljava/lang/StringBuilder;' in 'java/lang/StringBuilder')} - 0x000001814d852f64: ff49 bac0 | 981c 0e00 | 0000 004c | 8954 2408 | 48c7 0424 | ffff ffff - - 0x000001814d852f7c: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d852f7c: e85f ec9e - - 0x000001814d852f80: ; ImmutableOopMap {rsi=Oop [448]=Oop [472]=Oop [480]=Oop } - ;*synchronization entry - ; - java.lang.StringBuilder::append@-1 (line 179) - ; - java.lang.StringBuilder::append@5 (line 173) - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@35 (line 373) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852f80: 06e9 80e5 - - 0x000001814d852f84: ; {metadata({method} {0x000000000e1c8158} 'toString' '()Ljava/lang/String;' in 'java/lang/StringBuilder')} - 0x000001814d852f84: ffff 49ba | 5081 1c0e | 0000 0000 | 4c89 5424 | 0848 c704 | 24ff ffff - - 0x000001814d852f9c: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d852f9c: ffe8 3eec - - 0x000001814d852fa0: ; ImmutableOopMap {rbx=Oop [448]=Oop [480]=Oop } - ;*synchronization entry - ; - java.lang.StringBuilder::toString@-1 (line 474) - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@38 (line 373) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852fa0: 9e06 e99d - - 0x000001814d852fa4: ; {metadata({method} {0x000000000e1c8270} 'length' '()I' in 'java/lang/StringBuilder')} - 0x000001814d852fa4: e7ff ff49 | ba68 821c | 0e00 0000 | 004c 8954 | 2408 48c7 | 0424 ffff - - 0x000001814d852fbc: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d852fbc: ffff e81d - - 0x000001814d852fc0: ; ImmutableOopMap {rbx=Oop [448]=Oop [480]=Oop } - ;*synchronization entry - ; - java.lang.StringBuilder::length@-1 (line 91) - ; - java.lang.StringBuilder::toString@1 (line 474) - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@38 (line 373) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852fc0: ec9e 06e9 | 7ce9 ffff - - 0x000001814d852fc8: ; {metadata({method} {0x0000018163a36290} 'invokeStatic' '(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;JJ)I' in 'java/lang/invoke/LambdaForm$DMH+0x000000000f123000')} - 0x000001814d852fc8: 49ba 8862 | a363 8101 | 0000 4c89 | 5424 0848 | c704 24ff - - 0x000001814d852fdc: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d852fdc: ffff ffe8 - - 0x000001814d852fe0: ; ImmutableOopMap {[448]=Oop } - ;*synchronization entry - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@-1 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d852fe0: fceb 9e06 | e9db e9ff - - 0x000001814d852fe8: ; {metadata({method} {0x000000000e206b80} 'internalMemberName' '(Ljava/lang/Object;)Ljava/lang/Object;' in 'java/lang/invoke/DirectMethodHandle')} - 0x000001814d852fe8: ff49 ba78 | 6b20 0e00 | 0000 004c | 8954 2408 | 48c7 0424 | ffff ffff - - 0x000001814d853000: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d853000: e8db eb9e - - 0x000001814d853004: ; ImmutableOopMap {[448]=Oop } - ;*synchronization entry - ; - java.lang.invoke.DirectMethodHandle::internalMemberName@-1 (line 326) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@1 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d853004: 06e9 f3e9 - - 0x000001814d853008: ; {metadata({method} {0x0000018163cd43f0} 'invoke' '(Ljava/lang/foreign/SegmentAllocator;Ljava/lang/foreign/MemorySegment;JJ)I' in 'jdk/internal/foreign/abi/DowncallStub+0x000000000f160000')} - 0x000001814d853008: ffff 49ba | e843 cd63 | 8101 0000 | 4c89 5424 | 0848 c704 | 24ff ffff - - 0x000001814d853020: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d853020: ffe8 baeb - - 0x000001814d853024: ; ImmutableOopMap {[448]=Oop } - ;*synchronization entry - ; - jdk.internal.foreign.abi.DowncallStub/0x000000000f160000::invoke@-1 - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d853024: 9e06 e90b | eaff ff4c - - 0x000001814d85302c: ; {runtime_call C1 Runtime throw_class_cast_exception_blob} - 0x000001814d85302c: 8904 24e8 - - 0x000001814d853030: ; ImmutableOopMap {r8=Oop [448]=Oop } - ;*checkcast {reexecute=0 rethrow=0 return_oop=0} - ; - jdk.internal.foreign.abi.DowncallStub/0x000000000f160000::invoke@10 - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d853030: 2cad 9e06 - - 0x000001814d853034: ; {runtime_call C1 Runtime throw_null_pointer_exception_blob} - 0x000001814d853034: e827 759e - - 0x000001814d853038: ; ImmutableOopMap {r8=Oop rdx=Oop [448]=Oop } - ;*invokevirtual sessionImpl {reexecute=0 rethrow=0 return_oop=0} - ; - jdk.internal.foreign.abi.DowncallStub/0x000000000f160000::invoke@13 - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - ; {runtime_call C1 Runtime throw_null_pointer_exception_blob} - 0x000001814d853038: 06e8 2275 - - 0x000001814d85303c: ; ImmutableOopMap {r8=Oop rsi=Oop [448]=Oop } - ;*invokevirtual acquire0 {reexecute=0 rethrow=0 return_oop=0} - ; - jdk.internal.foreign.abi.DowncallStub/0x000000000f160000::invoke@17 - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d85303c: 9e06 4c89 - - 0x000001814d853040: ; {runtime_call C1 Runtime throw_class_cast_exception_blob} - 0x000001814d853040: 0424 e819 - - 0x000001814d853044: ; ImmutableOopMap {[488]=Oop } - ;*checkcast {reexecute=0 rethrow=0 return_oop=0} - ; - jdk.internal.foreign.abi.DowncallStub/0x000000000f160000::invoke@26 - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - ; {runtime_call C1 Runtime throw_null_pointer_exception_blob} - 0x000001814d853044: ad9e 06e8 - - 0x000001814d853048: ; ImmutableOopMap {rdx=Oop [488]=Oop } - ;*invokevirtual unsafeGetOffset {reexecute=0 rethrow=0 return_oop=0} - ; - jdk.internal.foreign.abi.DowncallStub/0x000000000f160000::invoke@29 - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d853048: 1475 9e06 - - 0x000001814d85304c: ; {metadata({method} {0x0000018163a3b2b8} 'invokeExact_MT' '(Ljava/lang/Object;JJJLjava/lang/Object;)I' in 'java/lang/invoke/LambdaForm$MH+0x000000000f125800')} - 0x000001814d85304c: 49ba b0b2 | a363 8101 | 0000 4c89 | 5424 0848 | c704 24ff - - 0x000001814d853060: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d853060: ffff ffe8 - - 0x000001814d853064: ; ImmutableOopMap {[488]=Oop } - ;*synchronization entry - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125800::invokeExact_MT@-1 - ; - jdk.internal.foreign.abi.DowncallStub/0x000000000f160000::invoke@52 - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d853064: 78eb 9e06 | e974 f2ff - - 0x000001814d85306c: ; {metadata({method} {0x000000000e47d768} 'checkExactType' '(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)V' in 'java/lang/invoke/Invokers')} - 0x000001814d85306c: ff49 ba60 | d747 0e00 | 0000 004c | 8954 2408 | 48c7 0424 | ffff ffff - - 0x000001814d853084: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d853084: e857 eb9e - - 0x000001814d853088: ; ImmutableOopMap {[488]=Oop } - ;*synchronization entry - ; - java.lang.invoke.Invokers::checkExactType@-1 (line 529) - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125800::invokeExact_MT@11 - ; - jdk.internal.foreign.abi.DowncallStub/0x000000000f160000::invoke@52 - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d853088: 06e9 91f2 - - 0x000001814d85308c: ; {metadata({method} {0x000000000e47d660} 'checkCustomized' '(Ljava/lang/invoke/MethodHandle;)V' in 'java/lang/invoke/Invokers')} - 0x000001814d85308c: ffff 49ba | 58d6 470e | 0000 0000 | 4c89 5424 | 0848 c704 | 24ff ffff - - 0x000001814d8530a4: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d8530a4: ffe8 36eb - - 0x000001814d8530a8: ; ImmutableOopMap {[488]=Oop } - ;*synchronization entry - ; - java.lang.invoke.Invokers::checkCustomized@-1 (line 622) - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125800::invokeExact_MT@15 - ; - jdk.internal.foreign.abi.DowncallStub/0x000000000f160000::invoke@52 - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d8530a8: 9e06 e99e - - 0x000001814d8530ac: ; {metadata({method} {0x000000000e1ff700} 'isCompileConstant' '(Ljava/lang/Object;)Z' in 'java/lang/invoke/MethodHandleImpl')} - 0x000001814d8530ac: f4ff ff49 | baf8 f61f | 0e00 0000 | 004c 8954 | 2408 48c7 | 0424 ffff - - 0x000001814d8530c4: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d8530c4: ffff e815 - - 0x000001814d8530c8: ; ImmutableOopMap {[488]=Oop } - ;*synchronization entry - ; - java.lang.invoke.MethodHandleImpl::isCompileConstant@-1 (line 625) - ; - java.lang.invoke.Invokers::checkCustomized@1 (line 622) - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125800::invokeExact_MT@15 - ; - jdk.internal.foreign.abi.DowncallStub/0x000000000f160000::invoke@52 - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d8530c8: eb9e 06e9 | bbf4 ffff - - 0x000001814d8530d0: ; {metadata({method} {0x00000181641702d8} 'invoke' '(Ljava/lang/Object;JJJ)I' in 'java/lang/invoke/LambdaForm$MH+0x000000000f1ef800')} - 0x000001814d8530d0: 49ba d002 | 1764 8101 | 0000 4c89 | 5424 0848 | c704 24ff - - 0x000001814d8530e4: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d8530e4: ffff ffe8 - - 0x000001814d8530e8: ; ImmutableOopMap {[488]=Oop } - ;*synchronization entry - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef800::invoke@-1 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125800::invokeExact_MT@23 - ; - jdk.internal.foreign.abi.DowncallStub/0x000000000f160000::invoke@52 - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d8530e8: f4ea 9e06 | e9f8 f4ff - - 0x000001814d8530f0: ; {metadata({method} {0x00000181632d6f00} 'internalNativeEntryPoint' '(Ljava/lang/Object;)Ljava/lang/Object;' in 'java/lang/invoke/NativeMethodHandle')} - 0x000001814d8530f0: ff49 baf8 | 6e2d 6381 | 0100 004c | 8954 2408 | 48c7 0424 | ffff ffff - - 0x000001814d853108: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d853108: e8d3 ea9e - - 0x000001814d85310c: ; ImmutableOopMap {[488]=Oop } - ;*synchronization entry - ; - java.lang.invoke.NativeMethodHandle::internalNativeEntryPoint@-1 (line 141) - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef800::invoke@5 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125800::invokeExact_MT@23 - ; - jdk.internal.foreign.abi.DowncallStub/0x000000000f160000::invoke@52 - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d85310c: 06e9 15f5 - - 0x000001814d853110: ; {metadata({method} {0x00000181633cc398} 'close' '()V' in 'jdk/internal/foreign/abi/SharedUtils$1')} - 0x000001814d853110: ffff 49ba | 90c3 3c63 | 8101 0000 | 4c89 5424 | 0848 c704 | 24ff ffff - - 0x000001814d853128: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d853128: ffe8 b2ea - - 0x000001814d85312c: ; ImmutableOopMap {rsi=Oop } - ;*synchronization entry - ; - jdk.internal.foreign.abi.SharedUtils$1::close@-1 (line 101) - ; - jdk.internal.foreign.abi.DowncallStub/0x000000000f160000::invoke@64 - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d85312c: 9e06 e98d - - 0x000001814d853130: ; {metadata({method} {0x00000181633cc398} 'close' '()V' in 'jdk/internal/foreign/abi/SharedUtils$1')} - 0x000001814d853130: f5ff ff49 | ba90 c33c | 6381 0100 | 004c 8954 | 2408 48c7 | 0424 ffff - - 0x000001814d853148: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d853148: ffff e891 - - 0x000001814d85314c: ; ImmutableOopMap {rdx=Oop rax=Oop } - ;*synchronization entry - ; - jdk.internal.foreign.abi.SharedUtils$1::close@-1 (line 101) - ; - jdk.internal.foreign.abi.DowncallStub/0x000000000f160000::invoke@85 - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d85314c: ea9e 06e9 | 0cf8 ffff - - 0x000001814d853154: ; {internal_word} - 0x000001814d853154: 49ba 9f29 | 854d 8101 | 0000 4d89 | 97e0 0400 - - 0x000001814d853164: ; {runtime_call SafepointBlob} - 0x000001814d853164: 00e9 f6f0 - - 0x000001814d853168: ; {runtime_call C1 Runtime throw_null_pointer_exception_blob} - 0x000001814d853168: 9006 e8f1 - - 0x000001814d85316c: ; ImmutableOopMap {rdx=Oop [504]=Oop } - ;*invokevirtual release0 {reexecute=0 rethrow=0 return_oop=0} - ; - jdk.internal.foreign.abi.DowncallStub/0x000000000f160000::invoke@97 - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f123000::invokeStatic@16 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@47 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d85316c: 739e 0648 - - 0x000001814d853170: ; {runtime_call C1 Runtime fast_new_instance_blob} - 0x000001814d853170: 8bd2 e8e9 - - 0x000001814d853174: ; ImmutableOopMap {rbx=Oop [448]=Oop [480]=Oop } - ;*new {reexecute=0 rethrow=0 return_oop=0} - ; - java.lang.StringBuilder::toString@10 (line 478) - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@38 (line 373) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d853174: 829e 06e9 | a0fa ffff - - 0x000001814d85317c: ; {metadata(nullptr)} - 0x000001814d85317c: 48ba 0000 | 0000 0000 | 0000 b800 - - 0x000001814d853188: ; {runtime_call C1 Runtime load_klass_patching_blob} - 0x000001814d853188: 0f05 0ae8 - - 0x000001814d85318c: ; ImmutableOopMap {[448]=Oop } - ;*new {reexecute=1 rethrow=0 return_oop=0} - ; - (reexecute) java.util.Objects::requireNonNull@4 (line 220) - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@1 (line 371) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d85318c: d0d3 9e06 | e913 fbff | ff48 8bd2 - - 0x000001814d853198: ; {runtime_call C1 Runtime fast_new_instance_blob} - 0x000001814d853198: e8c3 829e - - 0x000001814d85319c: ; ImmutableOopMap {[448]=Oop } - ;*new {reexecute=0 rethrow=0 return_oop=0} - ; - java.util.Objects::requireNonNull@4 (line 220) - ; - jdk.internal.foreign.abi.SharedUtils::checkSymbol@1 (line 371) - ; - java.lang.invoke.LambdaForm$DMH/0x000000000f04c800::invokeStatic@10 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f1ef400::invoke@27 - ; - java.lang.invoke.LambdaForm$MH/0x000000000f125000::invokeExact_MT@23 - ; - org.lwjgl.system.JNIBindingsImpl/0x000000000f070000::callPPI@7 - 0x000001814d85319c: 06e9 5efb - - 0x000001814d8531a0: ; {oop(nullptr)} - 0x000001814d8531a0: ffff 48ba | 0000 0000 | 0000 0000 | e940 f7ff | ff48 8b94 | 24e8 0100 | 00e9 33f7 | ffff 488b - 0x000001814d8531c0: 9424 e801 | 0000 e926 - - 0x000001814d8531c8: ; {oop(nullptr)} - 0x000001814d8531c8: f7ff ff48 | ba00 0000 | 0000 0000 | 00e9 17f7 - - 0x000001814d8531d8: ; {oop(nullptr)} - 0x000001814d8531d8: ffff 48ba | 0000 0000 | 0000 0000 | e908 f7ff - - 0x000001814d8531e8: ; {oop(nullptr)} - 0x000001814d8531e8: ff48 ba00 | 0000 0000 | 0000 00e9 | f9f6 ffff | 488b 9424 | e801 0000 | e9ec f6ff | ff48 8b94 - 0x000001814d853208: 24e8 0100 | 00e9 dff6 | ffff 498b | 8788 0500 | 0049 c787 | 8805 0000 | 0000 0000 | 49c7 8790 - 0x000001814d853228: 0500 0000 | 0000 0048 | 81c4 2002 - - 0x000001814d853234: ; {runtime_call C1 Runtime unwind_exception_blob} - 0x000001814d853234: 0000 5de9 | 2464 9e06 | f4f4 f4f4 -[Stub Code] - 0x000001814d853240: ; {other} - 0x000001814d853240: 0f1f 4400 - - 0x000001814d853244: ; {static_stub} - 0x000001814d853244: 0048 bb00 | 0000 0000 - - 0x000001814d85324c: ; {runtime_call nmethod} - 0x000001814d85324c: 0000 00e9 | fbff ffff - - 0x000001814d853254: ; {static_stub} - 0x000001814d853254: 9048 bb00 | 0000 0000 - - 0x000001814d85325c: ; {runtime_call nmethod} - 0x000001814d85325c: 0000 00e9 | fbff ffff - - 0x000001814d853264: ; {static_stub} - 0x000001814d853264: 9048 bb00 | 0000 0000 - - 0x000001814d85326c: ; {runtime_call nmethod} - 0x000001814d85326c: 0000 00e9 | fbff ffff - - 0x000001814d853274: ; {static_stub} - 0x000001814d853274: 9048 bb00 | 0000 0000 - - 0x000001814d85327c: ; {runtime_call nmethod} - 0x000001814d85327c: 0000 00e9 | fbff ffff - - 0x000001814d853284: ; {static_stub} - 0x000001814d853284: 9048 bb00 | 0000 0000 - - 0x000001814d85328c: ; {runtime_call nmethod} - 0x000001814d85328c: 0000 00e9 | fbff ffff - - 0x000001814d853294: ; {static_stub} - 0x000001814d853294: 9048 bb00 | 0000 0000 - - 0x000001814d85329c: ; {runtime_call nmethod} - 0x000001814d85329c: 0000 00e9 | fbff ffff - - 0x000001814d8532a4: ; {static_stub} - 0x000001814d8532a4: 9048 bb00 | 0000 0000 - - 0x000001814d8532ac: ; {runtime_call nmethod} - 0x000001814d8532ac: 0000 00e9 | fbff ffff - - 0x000001814d8532b4: ; {static_stub} - 0x000001814d8532b4: 48bb 0000 | 0000 0000 - - 0x000001814d8532bc: ; {runtime_call nmethod} - 0x000001814d8532bc: 0000 e9fb - - 0x000001814d8532c0: ; {static_stub} - 0x000001814d8532c0: ffff ff48 | bb00 0000 | 0000 0000 - - 0x000001814d8532cc: ; {runtime_call nmethod} - 0x000001814d8532cc: 00e9 fbff - - 0x000001814d8532d0: ; {static_stub} - 0x000001814d8532d0: ffff 48bb | 0000 0000 | 0000 0000 - - 0x000001814d8532dc: ; {runtime_call nmethod} - 0x000001814d8532dc: e9fb ffff - - 0x000001814d8532e0: ; {static_stub} - 0x000001814d8532e0: ff48 bb00 | 0000 0000 - - 0x000001814d8532e8: ; {runtime_call nmethod} - 0x000001814d8532e8: 0000 00e9 | fbff ffff - - 0x000001814d8532f0: ; {static_stub} - 0x000001814d8532f0: 48bb 0000 | 0000 0000 - - 0x000001814d8532f8: ; {runtime_call nmethod} - 0x000001814d8532f8: 0000 e9fb - - 0x000001814d8532fc: ; {static_stub} - 0x000001814d8532fc: ffff ff48 | bb00 0000 | 0000 0000 - - 0x000001814d853308: ; {runtime_call nmethod} - 0x000001814d853308: 00e9 fbff - - 0x000001814d85330c: ; {runtime_call C1 Runtime handle_exception_from_callee_blob} - 0x000001814d85330c: ffff e84d - - 0x000001814d853310: ; {external_word} - 0x000001814d853310: a49e 0648 | b9e8 6172 | bffd 7f00 | 0048 83e4 - - 0x000001814d853320: ; {runtime_call} - 0x000001814d853320: f048 b8b0 | d92c bffd | 7f00 00ff - - 0x000001814d85332c: ; {section_word} - 0x000001814d85332c: d0f4 49ba | 2e33 854d | 8101 0000 - - 0x000001814d853338: ; {runtime_call DeoptimizationBlob} - 0x000001814d853338: 4152 e921 - - 0x000001814d85333c: ; {section_word} - 0x000001814d85333c: 0591 0649 | ba3f 3385 | 4d81 0100 - - 0x000001814d853348: ; {runtime_call DeoptimizationBlob} - 0x000001814d853348: 0041 52e9 | 1005 9106 -[/MachCode] - - -Compiled method (c1) 20290 4231 3 org.lwjgl.system.JNI::callPPI (16 bytes) - total in heap [0x000001814d84e488,0x000001814d84ec98] = 2064 - main code [0x000001814d84e580,0x000001814d84ec38] = 1720 - stub code [0x000001814d84ec38,0x000001814d84ec78] = 64 - oops [0x000001814d84ec78,0x000001814d84ec98] = 32 - mutable data [0x000001812bb38370,0x000001812bb38448] = 216 - relocation [0x000001812bb38370,0x000001812bb38400] = 144 - metadata [0x000001812bb38400,0x000001812bb38448] = 72 - immutable data [0x000001812b51d960,0x000001812b51db58] = 504 - dependencies [0x000001812b51d960,0x000001812b51d978] = 24 - scopes pcs [0x000001812b51d978,0x000001812b51da48] = 208 - scopes data [0x000001812b51da48,0x000001812b51db58] = 272 - -[Constant Pool (empty)] - -[MachCode] -[Verified Entry Point] - # {method} {0x0000018163552438} 'callPPI' '(JJJ)I' in 'org/lwjgl/system/JNI' - # parm0: rdx:rdx = long - # parm1: r8:r8 = long - # parm2: r9:r9 = long - # [sp+0x120] (sp of caller) - 0x000001814d84e580: 8984 2400 | 80ff ff55 | 4881 ec10 | 0100 0090 | 4181 7f20 | 0100 0000 - - 0x000001814d84e598: ; {runtime_call Stub::method_entry_barrier} - 0x000001814d84e598: 7405 e841 | 718f 0648 | 8bda 4d8b - - 0x000001814d84e5a4: ; {metadata(method data for {method} {0x0000018163552438} 'callPPI' '(JJJ)I' in 'org/lwjgl/system/JNI')} - 0x000001814d84e5a4: d848 bab8 | 6620 6481 | 0100 008b | b290 0000 | 0083 c602 | 89b2 9000 | 0000 81e6 | fe07 0000 - 0x000001814d84e5c4: 85f6 0f84 | bb04 0000 - - 0x000001814d84e5cc: ; {metadata(method data for {method} {0x0000018163552438} 'callPPI' '(JJJ)I' in 'org/lwjgl/system/JNI')} - 0x000001814d84e5cc: 48ba b866 | 2064 8101 | 0000 4883 | 82d8 0000 - - 0x000001814d84e5dc: ; {metadata(method data for {method} {0x000001816327ce60} 'ofAddress' '(J)Ljava/lang/foreign/MemorySegment;' in 'java/lang/foreign/MemorySegment')} - 0x000001814d84e5dc: 0001 48ba | 085a 3263 | 8101 0000 | 8bb2 9000 | 0000 83c6 | 0289 b290 | 0000 0081 | e6fe ff1f - 0x000001814d84e5fc: 0085 f60f | 84a3 0400 - - 0x000001814d84e604: ; {metadata(method data for {method} {0x000001816327ce60} 'ofAddress' '(J)Ljava/lang/foreign/MemorySegment;' in 'java/lang/foreign/MemorySegment')} - 0x000001814d84e604: 0048 ba08 | 5a32 6381 | 0100 0048 | 8382 d800 - - 0x000001814d84e614: ; {metadata(method data for {method} {0x00000181632f2838} 'makeNativeSegmentUnchecked' '(JJ)Ljdk/internal/foreign/NativeMemorySegmentImpl;' in 'jdk/internal/foreign/SegmentFactories')} - 0x000001814d84e614: 0000 0148 | ba60 5f32 | 6381 0100 | 008b b290 | 0000 0083 | c602 89b2 | 9000 0000 | 81e6 feff - 0x000001814d84e634: 1f00 85f6 | 0f84 8b04 - - 0x000001814d84e63c: ; {metadata(method data for {method} {0x00000181632f2838} 'makeNativeSegmentUnchecked' '(JJ)Ljdk/internal/foreign/NativeMemorySegmentImpl;' in 'jdk/internal/foreign/SegmentFactories')} - 0x000001814d84e63c: 0000 48ba | 605f 3263 | 8101 0000 | 4883 82d8 | 0000 0001 - - 0x000001814d84e650: ; {metadata(method data for {method} {0x00000181632f3bb0} 'ensureInitialized' '()V' in 'jdk/internal/foreign/SegmentFactories')} - 0x000001814d84e650: 48ba 10ca | 3163 8101 | 0000 8bb2 | 9000 0000 | 83c6 0289 | b290 0000 | 0081 e6fe | ff1f 0085 - 0x000001814d84e670: f60f 8473 - - 0x000001814d84e674: ; {metadata('jdk/internal/foreign/NativeMemorySegmentImpl')} - 0x000001814d84e674: 0400 0048 | ba98 fc02 | 0f00 0000 | 0049 8b87 | c801 0000 | 488d 7828 | 493b bfd8 | 0100 000f - 0x000001814d84e694: 8772 0400 | 0049 89bf | c801 0000 | 48c7 0001 | 0000 0048 | 8bca 41ba | 0000 000e | 492b ca89 - 0x000001814d84e6b4: 4808 4833 | c989 480c | 4833 c948 | 8948 1048 | 8948 1848 | 8948 204c - - 0x000001814d84e6cc: ; {metadata(method data for {method} {0x00000181632f2838} 'makeNativeSegmentUnchecked' '(JJ)Ljdk/internal/foreign/NativeMemorySegmentImpl;' in 'jdk/internal/foreign/SegmentFactories')} - 0x000001814d84e6cc: 8bc0 48bf | 605f 3263 | 8101 0000 | 4883 87e8 | 0000 0001 - - 0x000001814d84e6e0: ; {metadata(method data for {method} {0x00000181632f4810} '' '(JJZLjdk/internal/foreign/MemorySessionImpl;)V' in 'jdk/internal/foreign/NativeMemorySegmentImpl')} - 0x000001814d84e6e0: 49b8 60b4 | 3163 8101 | 0000 418b | b890 0000 | 0083 c702 | 4189 b890 | 0000 0081 | e7fe ff1f - 0x000001814d84e700: 0085 ff0f | 840f 0400 | 004c 8bc0 - - 0x000001814d84e70c: ; {metadata(method data for {method} {0x00000181632f4810} '' '(JJZLjdk/internal/foreign/MemorySessionImpl;)V' in 'jdk/internal/foreign/NativeMemorySegmentImpl')} - 0x000001814d84e70c: 48bf 60b4 | 3163 8101 | 0000 4883 | 87d8 0000 - - 0x000001814d84e71c: ; {metadata(method data for {method} {0x00000181632fa418} '' '(JZLjdk/internal/foreign/MemorySessionImpl;)V' in 'jdk/internal/foreign/AbstractMemorySegmentImpl')} - 0x000001814d84e71c: 0001 49b8 | 80b6 3163 | 8101 0000 | 418b b890 | 0000 0083 | c702 4189 | b890 0000 | 0081 e7fe - 0x000001814d84e73c: ff1f 0085 | ff0f 84f2 | 0300 004c - - 0x000001814d84e748: ; {metadata(method data for {method} {0x00000181632fa418} '' '(JZLjdk/internal/foreign/MemorySessionImpl;)V' in 'jdk/internal/foreign/AbstractMemorySegmentImpl')} - 0x000001814d84e748: 8bc0 48bf | 80b6 3163 | 8101 0000 | 4883 87d8 | 0000 0001 - - 0x000001814d84e75c: ; {metadata(method data for {method} {0x000000000e4b5710} '' '()V' in 'java/lang/Object')} - 0x000001814d84e75c: 49b8 98ef | 0063 8101 | 0000 418b | b890 0000 | 0083 c702 | 4189 b890 | 0000 0081 | e7fe ff1f - 0x000001814d84e77c: 0085 ff0f | 84d5 0300 - - 0x000001814d84e784: ; {oop(a 'jdk/internal/foreign/GlobalSession'{0x000000074ca959b0})} - 0x000001814d84e784: 0049 b8b0 | 59a9 4c07 | 0000 0045 | 0fbe 4748 | 4585 c00f | 85de 0300 - - 0x000001814d84e79c: ; {oop(a 'jdk/internal/foreign/GlobalSession'{0x000000074ca959b0})} - 0x000001814d84e79c: 0049 bab0 | 59a9 4c07 | 0000 0049 | c1ea 0344 - - 0x000001814d84e7ac: ; {oop(a 'jdk/internal/foreign/GlobalSession'{0x000000074ca959b0})} - 0x000001814d84e7ac: 8950 1849 | b8b0 59a9 | 4c07 0000 | 0048 8bf8 | 4933 f848 | c1ef 1548 | 83ff 000f | 85ce 0300 - 0x000001814d84e7cc: ; {metadata(method data for {method} {0x00000181632f4810} '' '(JJZLjdk/internal/foreign/MemorySessionImpl;)V' in 'jdk/internal/foreign/NativeMemorySegmentImpl')} - 0x000001814d84e7cc: 0049 b860 | b431 6381 | 0100 0049 | 8380 e800 - - 0x000001814d84e7dc: ; {metadata(method data for {method} {0x000000000e491c98} 'getUnsafe' '()Ljdk/internal/misc/Unsafe;' in 'jdk/internal/misc/Unsafe')} - 0x000001814d84e7dc: 0000 0149 | b878 b231 | 6381 0100 | 0041 8bb8 | 9000 0000 | 83c7 0241 | 89b8 9000 | 0000 81e7 - 0x000001814d84e7fc: feff 1f00 | 85ff 0f84 | ab03 0000 - - 0x000001814d84e808: ; {oop(a 'jdk/internal/misc/Unsafe'{0x000000074cb21d88})} - 0x000001814d84e808: 49b8 881d | b24c 0700 - - 0x000001814d84e810: ; {metadata(method data for {method} {0x00000181632f4810} '' '(JJZLjdk/internal/foreign/MemorySessionImpl;)V' in 'jdk/internal/foreign/NativeMemorySegmentImpl')} - 0x000001814d84e810: 0000 48bf | 60b4 3163 | 8101 0000 | 458b 4008 | 41ba 0000 | 000e 4d03 | c24c 3b87 | 0001 0000 - 0x000001814d84e830: 750d 4883 | 8708 0100 | 0001 e9aa | 0100 004c | 3b87 1001 | 0000 750d | 4883 8718 | 0100 0001 - 0x000001814d84e850: e994 0100 | 004c 3b87 | 2001 0000 | 750d 4883 | 8728 0100 | 0001 e97e | 0100 004c | 3b87 3001 - 0x000001814d84e870: 0000 750d | 4883 8738 | 0100 0001 | e968 0100 | 004c 3b87 | 4001 0000 | 750d 4883 | 8748 0100 - 0x000001814d84e890: 0001 e952 | 0100 004c | 3b87 5001 | 0000 750d | 4883 8758 | 0100 0001 | e93c 0100 | 004c 3b87 - 0x000001814d84e8b0: 6001 0000 | 750d 4883 | 8768 0100 | 0001 e926 | 0100 004c | 3b87 7001 | 0000 750d | 4883 8778 - 0x000001814d84e8d0: 0100 0001 | e910 0100 | 0048 83bf | 0001 0000 | 0075 174c | 8987 0001 | 0000 48c7 | 8708 0100 - 0x000001814d84e8f0: 0001 0000 | 00e9 ef00 | 0000 4883 | bf10 0100 | 0000 7517 | 4c89 8710 | 0100 0048 | c787 1801 - 0x000001814d84e910: ; {other} - 0x000001814d84e910: 0000 0100 | 0000 e9ce | 0000 0048 | 83bf 2001 | 0000 0075 | 174c 8987 | 2001 0000 | 48c7 8728 - 0x000001814d84e930: 0100 0001 | 0000 00e9 | ad00 0000 | 4883 bf30 | 0100 0000 | 7517 4c89 | 8730 0100 | 0048 c787 - 0x000001814d84e950: 3801 0000 | 0100 0000 | e98c 0000 | 0048 83bf | 4001 0000 | 0075 174c | 8987 4001 | 0000 48c7 - 0x000001814d84e970: 8748 0100 | 0001 0000 | 00e9 6b00 | 0000 4883 | bf50 0100 | 0000 7517 | 4c89 8750 | 0100 0048 - 0x000001814d84e990: c787 5801 | 0000 0100 | 0000 e94a | 0000 0048 | 83bf 6001 | 0000 0075 | 174c 8987 | 6001 0000 - 0x000001814d84e9b0: 48c7 8768 | 0100 0001 | 0000 00e9 | 2900 0000 | 4883 bf70 | 0100 0000 | 7517 4c89 | 8770 0100 - 0x000001814d84e9d0: 0048 c787 | 7801 0000 | 0100 0000 | e908 0000 | 0048 8387 | f800 0000 - - 0x000001814d84e9e8: ; {metadata(method data for {method} {0x000000000e48f318} 'addressSize' '()I' in 'jdk/internal/misc/Unsafe')} - 0x000001814d84e9e8: 0149 b868 | b331 6381 | 0100 0041 | 8bb8 9000 | 0000 83c7 | 0241 89b8 | 9000 0000 | 81e7 feff - 0x000001814d84ea08: 1f00 85ff | 0f84 c201 - - 0x000001814d84ea10: ; {metadata(method data for {method} {0x00000181632f4810} '' '(JJZLjdk/internal/foreign/MemorySessionImpl;)V' in 'jdk/internal/foreign/NativeMemorySegmentImpl')} - 0x000001814d84ea10: 0000 49b8 | 60b4 3163 | 8101 0000 | 41ff 8088 | 0100 004c - - 0x000001814d84ea24: ; {oop(a 'org/lwjgl/system/JNIBindingsImpl+0x000000000f070000'{0x000000074c872cc0})} - 0x000001814d84ea24: 8948 2048 | bac0 2c87 | 4c07 0000 | 004c 8bc2 - - 0x000001814d84ea34: ; {metadata(method data for {method} {0x0000018163552438} 'callPPI' '(JJJ)I' in 'org/lwjgl/system/JNI')} - 0x000001814d84ea34: 49b9 b866 | 2064 8101 - - 0x000001814d84ea3c: ; {metadata('org/lwjgl/system/JNIBindingsImpl+0x000000000f070000')} - 0x000001814d84ea3c: 0000 49ba | 0000 070f | 0000 0000 | 4d89 91f0 | 0000 0049 | 8381 f800 | 0000 014c | 8bc0 4c8b - 0x000001814d84ea5c: cb49 8bfb | 0f1f 8000 - - 0x000001814d84ea64: ; {optimized virtual_call} - 0x000001814d84ea64: 0000 00e8 - - 0x000001814d84ea68: ; ImmutableOopMap {} - ;*invokeinterface callPPI {reexecute=0 rethrow=0 return_oop=0} - ; - org.lwjgl.system.JNI::callPPI@10 (line 2014) - 0x000001814d84ea68: b419 0000 - - 0x000001814d84ea6c: ; {post_call_nop} - 0x000001814d84ea6c: 0f1f 8400 | e405 0000 | 4881 c410 | 0100 005d - - 0x000001814d84ea7c: ; {poll_return} - 0x000001814d84ea7c: 493b 6728 | 0f87 6f01 - - 0x000001814d84ea84: ; {metadata({method} {0x0000018163552438} 'callPPI' '(JJJ)I' in 'org/lwjgl/system/JNI')} - 0x000001814d84ea84: 0000 c349 | ba30 2455 | 6381 0100 | 004c 8954 | 2408 48c7 | 0424 ffff - - 0x000001814d84ea9c: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d84ea9c: ffff e83d - - 0x000001814d84eaa0: ; ImmutableOopMap {} - ;*synchronization entry - ; - org.lwjgl.system.JNI::callPPI@-1 (line 2014) - 0x000001814d84eaa0: 319f 06e9 | 24fb ffff - - 0x000001814d84eaa8: ; {metadata({method} {0x000001816327ce60} 'ofAddress' '(J)Ljava/lang/foreign/MemorySegment;' in 'java/lang/foreign/MemorySegment')} - 0x000001814d84eaa8: 49ba 58ce | 2763 8101 | 0000 4c89 | 5424 0848 | c704 24ff - - 0x000001814d84eabc: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d84eabc: ffff ffe8 - - 0x000001814d84eac0: ; ImmutableOopMap {} - ;*synchronization entry - ; - java.lang.foreign.MemorySegment::ofAddress@-1 (line 1544) - ; - org.lwjgl.system.JNI::callPPI@5 (line 2014) - 0x000001814d84eac0: 1c31 9f06 | e93c fbff - - 0x000001814d84eac8: ; {metadata({method} {0x00000181632f2838} 'makeNativeSegmentUnchecked' '(JJ)Ljdk/internal/foreign/NativeMemorySegmentImpl;' in 'jdk/internal/foreign/SegmentFactories')} - 0x000001814d84eac8: ff49 ba30 | 282f 6381 | 0100 004c | 8954 2408 | 48c7 0424 | ffff ffff - - 0x000001814d84eae0: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d84eae0: e8fb 309f - - 0x000001814d84eae4: ; ImmutableOopMap {} - ;*synchronization entry - ; - jdk.internal.foreign.SegmentFactories::makeNativeSegmentUnchecked@-1 (line 82) - ; - java.lang.foreign.MemorySegment::ofAddress@2 (line 1544) - ; - org.lwjgl.system.JNI::callPPI@5 (line 2014) - 0x000001814d84eae4: 06e9 54fb - - 0x000001814d84eae8: ; {metadata({method} {0x00000181632f3bb0} 'ensureInitialized' '()V' in 'jdk/internal/foreign/SegmentFactories')} - 0x000001814d84eae8: ffff 49ba | a83b 2f63 | 8101 0000 | 4c89 5424 | 0848 c704 | 24ff ffff - - 0x000001814d84eb00: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d84eb00: ffe8 da30 - - 0x000001814d84eb04: ; ImmutableOopMap {} - ;*synchronization entry - ; - jdk.internal.foreign.SegmentFactories::ensureInitialized@-1 (line 280) - ; - jdk.internal.foreign.SegmentFactories::makeNativeSegmentUnchecked@0 (line 82) - ; - java.lang.foreign.MemorySegment::ofAddress@2 (line 1544) - ; - org.lwjgl.system.JNI::callPPI@5 (line 2014) - 0x000001814d84eb04: 9f06 e96c | fbff ff48 - - 0x000001814d84eb0c: ; {runtime_call C1 Runtime fast_new_instance_blob} - 0x000001814d84eb0c: 8bd2 e84d - - 0x000001814d84eb10: ; ImmutableOopMap {} - ;*new {reexecute=0 rethrow=0 return_oop=0} - ; - jdk.internal.foreign.SegmentFactories::makeNativeSegmentUnchecked@3 (line 83) - ; - java.lang.foreign.MemorySegment::ofAddress@2 (line 1544) - ; - org.lwjgl.system.JNI::callPPI@5 (line 2014) - 0x000001814d84eb10: c99e 06e9 | b3fb ffff - - 0x000001814d84eb18: ; {metadata({method} {0x00000181632f4810} '' '(JJZLjdk/internal/foreign/MemorySessionImpl;)V' in 'jdk/internal/foreign/NativeMemorySegmentImpl')} - 0x000001814d84eb18: 49ba 0848 | 2f63 8101 | 0000 4c89 | 5424 0848 | c704 24ff - - 0x000001814d84eb2c: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d84eb2c: ffff ffe8 - - 0x000001814d84eb30: ; ImmutableOopMap {rax=Oop } - ;*synchronization entry - ; - jdk.internal.foreign.NativeMemorySegmentImpl::@-1 (line 45) - ; - jdk.internal.foreign.SegmentFactories::makeNativeSegmentUnchecked@13 (line 83) - ; - java.lang.foreign.MemorySegment::ofAddress@2 (line 1544) - ; - org.lwjgl.system.JNI::callPPI@5 (line 2014) - 0x000001814d84eb30: ac30 9f06 | e9d0 fbff - - 0x000001814d84eb38: ; {metadata({method} {0x00000181632fa418} '' '(JZLjdk/internal/foreign/MemorySessionImpl;)V' in 'jdk/internal/foreign/AbstractMemorySegmentImpl')} - 0x000001814d84eb38: ff49 ba10 | a42f 6381 | 0100 004c | 8954 2408 | 48c7 0424 | ffff ffff - - 0x000001814d84eb50: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d84eb50: e88b 309f - - 0x000001814d84eb54: ; ImmutableOopMap {rax=Oop } - ;*synchronization entry - ; - jdk.internal.foreign.AbstractMemorySegmentImpl::@-1 (line 81) - ; - jdk.internal.foreign.NativeMemorySegmentImpl::@6 (line 45) - ; - jdk.internal.foreign.SegmentFactories::makeNativeSegmentUnchecked@13 (line 83) - ; - java.lang.foreign.MemorySegment::ofAddress@2 (line 1544) - ; - org.lwjgl.system.JNI::callPPI@5 (line 2014) - 0x000001814d84eb54: 06e9 edfb - - 0x000001814d84eb58: ; {metadata({method} {0x000000000e4b5710} '' '()V' in 'java/lang/Object')} - 0x000001814d84eb58: ffff 49ba | 0857 4b0e | 0000 0000 | 4c89 5424 | 0848 c704 | 24ff ffff - - 0x000001814d84eb70: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d84eb70: ffe8 6a30 - - 0x000001814d84eb74: ; ImmutableOopMap {rax=Oop } - ;*synchronization entry - ; - java.lang.Object::@-1 (line 44) - ; - jdk.internal.foreign.AbstractMemorySegmentImpl::@1 (line 81) - ; - jdk.internal.foreign.NativeMemorySegmentImpl::@6 (line 45) - ; - jdk.internal.foreign.SegmentFactories::makeNativeSegmentUnchecked@13 (line 83) - ; - java.lang.foreign.MemorySegment::ofAddress@2 (line 1544) - ; - org.lwjgl.system.JNI::callPPI@5 (line 2014) - 0x000001814d84eb74: 9f06 e90a | fcff ff44 | 8b40 1849 | c1e0 0349 | 83f8 000f | 8410 fcff | ff4c 8904 - - 0x000001814d84eb90: ; {runtime_call g1_pre_barrier_slow} - 0x000001814d84eb90: 24e8 4a37 | 9f06 e902 | fcff ff49 | 83f8 000f | 8428 fcff | ff48 8904 - - 0x000001814d84eba8: ; {runtime_call g1_post_barrier_slow} - 0x000001814d84eba8: 24e8 323a | 9f06 e91a - - 0x000001814d84ebb0: ; {metadata({method} {0x000000000e491c98} 'getUnsafe' '()Ljdk/internal/misc/Unsafe;' in 'jdk/internal/misc/Unsafe')} - 0x000001814d84ebb0: fcff ff49 | ba90 1c49 | 0e00 0000 | 004c 8954 | 2408 48c7 | 0424 ffff - - 0x000001814d84ebc8: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d84ebc8: ffff e811 - - 0x000001814d84ebcc: ; ImmutableOopMap {rax=Oop } - ;*synchronization entry - ; - jdk.internal.misc.Unsafe::getUnsafe@-1 (line 97) - ; - jdk.internal.foreign.NativeMemorySegmentImpl::@10 (line 46) - ; - jdk.internal.foreign.SegmentFactories::makeNativeSegmentUnchecked@13 (line 83) - ; - java.lang.foreign.MemorySegment::ofAddress@2 (line 1544) - ; - org.lwjgl.system.JNI::callPPI@5 (line 2014) - 0x000001814d84ebcc: 309f 06e9 | 34fc ffff - - 0x000001814d84ebd4: ; {metadata({method} {0x000000000e48f318} 'addressSize' '()I' in 'jdk/internal/misc/Unsafe')} - 0x000001814d84ebd4: 49ba 10f3 | 480e 0000 | 0000 4c89 | 5424 0848 | c704 24ff - - 0x000001814d84ebe8: ; {runtime_call C1 Runtime counter_overflow_blob} - 0x000001814d84ebe8: ffff ffe8 - - 0x000001814d84ebec: ; ImmutableOopMap {rax=Oop } - ;*synchronization entry - ; - jdk.internal.misc.Unsafe::addressSize@-1 (line 1297) - ; - jdk.internal.foreign.NativeMemorySegmentImpl::@13 (line 46) - ; - jdk.internal.foreign.SegmentFactories::makeNativeSegmentUnchecked@13 (line 83) - ; - java.lang.foreign.MemorySegment::ofAddress@2 (line 1544) - ; - org.lwjgl.system.JNI::callPPI@5 (line 2014) - 0x000001814d84ebec: f02f 9f06 | e91d feff - - 0x000001814d84ebf4: ; {internal_word} - 0x000001814d84ebf4: ff49 ba7c | ea84 4d81 | 0100 004d | 8997 e004 - - 0x000001814d84ec04: ; {runtime_call SafepointBlob} - 0x000001814d84ec04: 0000 e955 | 3691 0649 | 8b87 8805 | 0000 49c7 | 8788 0500 | 0000 0000 | 0049 c787 | 9005 0000 - 0x000001814d84ec24: 0000 0000 | 4881 c410 | 0100 005d - - 0x000001814d84ec30: ; {runtime_call C1 Runtime unwind_exception_blob} - 0x000001814d84ec30: e92b aa9e | 06f4 f4f4 -[Stub Code] - 0x000001814d84ec38: ; {static_stub} - 0x000001814d84ec38: 48bb 0000 | 0000 0000 - - 0x000001814d84ec40: ; {runtime_call nmethod} - 0x000001814d84ec40: 0000 e9fb - - 0x000001814d84ec44: ; {runtime_call C1 Runtime handle_exception_from_callee_blob} - 0x000001814d84ec44: ffff ffe8 | 14eb 9e06 - - 0x000001814d84ec4c: ; {external_word} - 0x000001814d84ec4c: 48b9 e861 | 72bf fd7f | 0000 4883 - - 0x000001814d84ec58: ; {runtime_call} - 0x000001814d84ec58: e4f0 48b8 | b0d9 2cbf | fd7f 0000 - - 0x000001814d84ec64: ; {section_word} - 0x000001814d84ec64: ffd0 f449 | ba67 ec84 | 4d81 0100 - - 0x000001814d84ec70: ; {runtime_call DeoptimizationBlob} - 0x000001814d84ec70: 0041 52e9 | e84b 9106 -[/MachCode] - - ---------------- P R O C E S S --------------- - -Threads class SMR info: -_java_thread_list=0x000001812b499700, length=17, elements={ -0x00000181401f6960, 0x00000181623fd430, 0x00000181624002a0, 0x0000018162403110, -0x0000018162404ce0, 0x0000018162412340, 0x0000018162412f00, 0x00000181428f8b50, -0x00000181428fa380, 0x00000181625e4140, 0x00000181625e4b00, 0x000001810004d9c0, -0x0000018103d2f000, 0x000001816240f970, 0x000001810484a030, 0x000001810028b750, -0x000001812cb2b9d0 -} - -Java Threads: ( => current thread ) - 0x00000181401f6960 JavaThread "Terrain4J Primary Runtime Thread" [_thread_in_Java, id=16420, stack(0x0000002dc7600000,0x0000002dc7700000) (1024K)] - 0x00000181623fd430 JavaThread "Reference Handler" daemon [_thread_blocked, id=5424, stack(0x0000002dc7e00000,0x0000002dc7f00000) (1024K)] - 0x00000181624002a0 JavaThread "Finalizer" daemon [_thread_blocked, id=18092, stack(0x0000002dc7f00000,0x0000002dc8000000) (1024K)] - 0x0000018162403110 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=19272, stack(0x0000002dc8000000,0x0000002dc8100000) (1024K)] - 0x0000018162404ce0 JavaThread "Attach Listener" daemon [_thread_blocked, id=2780, stack(0x0000002dc8100000,0x0000002dc8200000) (1024K)] - 0x0000018162412340 JavaThread "Service Thread" daemon [_thread_blocked, id=8332, stack(0x0000002dc8200000,0x0000002dc8300000) (1024K)] - 0x0000018162412f00 JavaThread "Monitor Deflation Thread" daemon [_thread_blocked, id=856, stack(0x0000002dc8300000,0x0000002dc8400000) (1024K)] - 0x00000181428f8b50 JavaThread "JVMCI-native CompilerThread0" daemon [_thread_blocked, id=12924, stack(0x0000002dc8400000,0x0000002dc8500000) (1024K)] - 0x00000181428fa380 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=20672, stack(0x0000002dc8500000,0x0000002dc8600000) (1024K)] - 0x00000181625e4140 JavaThread "Notification Thread" daemon [_thread_blocked, id=19876, stack(0x0000002dc8800000,0x0000002dc8900000) (1024K)] - 0x00000181625e4b00 JavaThread "Common-Cleaner" daemon [_thread_blocked, id=6836, stack(0x0000002dc8900000,0x0000002dc8a00000) (1024K)] - 0x000001810004d9c0 JavaThread "tinylog-WritingThread" daemon [_thread_blocked, id=10268, stack(0x0000002dc8a00000,0x0000002dc8b00000) (1024K)] - 0x0000018103d2f000 JavaThread "Terrain4J Main Engine Thread" [_thread_blocked, id=19124, stack(0x0000002dc8700000,0x0000002dc8800000) (1024K)] -=>0x000001816240f970 JavaThread "Terrain4J Render Engine Thread" [_thread_in_native, id=14748, stack(0x0000002dc9e00000,0x0000002dc9f00000) (1024K)] - 0x000001810484a030 JavaThread "Terrain4J Fast Engine Thread" [_thread_in_Java, id=20376, stack(0x0000002dc9f00000,0x0000002dca000000) (1024K)] - 0x000001810028b750 JavaThread "C1 CompilerThread1" daemon [_thread_blocked, id=15904, stack(0x0000002dc8600000,0x0000002dc8700000) (1024K)] - 0x000001812cb2b9d0 JavaThread "Thread-6" daemon [_thread_in_native, id=19512, stack(0x0000002dc9d00000,0x0000002dc9e00000) (1024K)] -Total: 17 - -Other Threads: - 0x00000181623ee5d0 VMThread "VM Thread" [id=20556, stack(0x0000002dc7d00000,0x0000002dc7e00000) (1024K)] - 0x00000181623df8e0 WatcherThread "VM Periodic Task Thread" [id=19524, stack(0x0000002dc7c00000,0x0000002dc7d00000) (1024K)] - 0x0000018142941750 WorkerThread "GC Thread#0" [id=10096, stack(0x0000002dc7700000,0x0000002dc7800000) (1024K)] - 0x0000018100c67010 WorkerThread "GC Thread#1" [id=6180, stack(0x0000002dc9100000,0x0000002dc9200000) (1024K)] - 0x00000181012717c0 WorkerThread "GC Thread#2" [id=13144, stack(0x0000002dc9200000,0x0000002dc9300000) (1024K)] - 0x0000018100c5d780 WorkerThread "GC Thread#3" [id=20028, stack(0x0000002dc9300000,0x0000002dc9400000) (1024K)] - 0x000001810106ad20 WorkerThread "GC Thread#4" [id=16292, stack(0x0000002dc9400000,0x0000002dc9500000) (1024K)] - 0x000001810106d840 WorkerThread "GC Thread#5" [id=18296, stack(0x0000002dc9500000,0x0000002dc9600000) (1024K)] - 0x000001810106a480 WorkerThread "GC Thread#6" [id=13608, stack(0x0000002dc9600000,0x0000002dc9700000) (1024K)] - 0x0000018142954220 ConcurrentGCThread "G1 Main Marker" [id=4164, stack(0x0000002dc7800000,0x0000002dc7900000) (1024K)] - 0x0000018142954dc0 WorkerThread "G1 Conc#0" [id=21496, stack(0x0000002dc7900000,0x0000002dc7a00000) (1024K)] - 0x00000181622b2090 ConcurrentGCThread "G1 Refine#0" [id=19904, stack(0x0000002dc7a00000,0x0000002dc7b00000) (1024K)] - 0x00000181622b2ca0 ConcurrentGCThread "G1 Service" [id=6584, stack(0x0000002dc7b00000,0x0000002dc7c00000) (1024K)] -Total: 13 - -Threads with active compile tasks: -Total: 0 - -VM state: not at safepoint (normal execution) - -VM Mutex/Monitor currently owned by a thread: None - -Heap address: 0x0000000744000000, size: 3008 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 - -CDS archive(s) mapped at: [0x000000000e000000-0x000000000ede0000-0x000000000ede0000), size 14548992, SharedBaseAddress: 0x000000000e000000, ArchiveRelocationMode: 1. -Compressed class space mapped at: 0x000000000f000000-0x000000004f000000, reserved size: 1073741824 -UseCompressedClassPointers 1, UseCompactObjectHeaders 0 -Narrow klass pointer bits 32, Max shift 3 -Narrow klass base: 0x000000000e000000, Narrow klass shift: 0 -Encoding Range: [0x000000000e000000 - 0x000000010e000000), (4294967296 bytes) -Klass Range: [0x000000000e010000 - 0x000000004f000000), (1090453504 bytes) -Klass ID Range: [65536 - 1090519033) (1090453497) -Protection zone: [0x000000000e000000 - 0x000000000e010000), (65536 bytes) - -GC Precious Log: - CardTable entry size: 512 - Card Set container configuration: InlinePtr #cards 4 size 8 Array Of Cards #cards 16 size 48 Howl #buckets 8 coarsen threshold 3686 Howl Bitmap #cards 512 size 80 coarsen threshold 460 Card regions per heap region 1 cards per card region 4096 - CPUs: 8 total, 8 available - Memory: 12026M - Large Page Support: Disabled - NUMA Support: Disabled - Compressed Oops: Enabled (Zero based) - Heap Region Size: 2M - Heap Min Capacity: 8M - Heap Initial Capacity: 188M - Heap Max Capacity: 3008M - Pre-touch: Disabled - Parallel Workers: 8 - Concurrent Workers: 2 - Concurrent Refinement Workers: 8 - Periodic GC: Disabled - -Heap: - garbage-first heap total reserved 3080192K, committed 194560K, used 74221K [0x0000000744000000, 0x0000000800000000) - region size 2048K, 37 young (75776K), 3 survivors (6144K) - -Heap Regions: E=young(eden), S=young(survivor), O=old, HS=humongous(starts), HC=humongous(continues), CS=collection set, F=free, TAMS=top-at-mark-start, PB=parsable bottom -| 0|0x0000000744000000, 0x0000000744000000, 0x0000000744200000| 0%| F| |TAMS 0x0000000744000000| PB 0x0000000744000000| Untracked | 0 -| 1|0x0000000744200000, 0x0000000744200000, 0x0000000744400000| 0%| F| |TAMS 0x0000000744200000| PB 0x0000000744200000| Untracked | 0 -| 2|0x0000000744400000, 0x0000000744400000, 0x0000000744600000| 0%| F| |TAMS 0x0000000744400000| PB 0x0000000744400000| Untracked | 0 -| 3|0x0000000744600000, 0x0000000744600000, 0x0000000744800000| 0%| F| |TAMS 0x0000000744600000| PB 0x0000000744600000| Untracked | 0 -| 4|0x0000000744800000, 0x0000000744800000, 0x0000000744a00000| 0%| F| |TAMS 0x0000000744800000| PB 0x0000000744800000| Untracked | 0 -| 5|0x0000000744a00000, 0x0000000744a00000, 0x0000000744c00000| 0%| F| |TAMS 0x0000000744a00000| PB 0x0000000744a00000| Untracked | 0 -| 6|0x0000000744c00000, 0x0000000744c00000, 0x0000000744e00000| 0%| F| |TAMS 0x0000000744c00000| PB 0x0000000744c00000| Untracked | 0 -| 7|0x0000000744e00000, 0x0000000744e00000, 0x0000000745000000| 0%| F| |TAMS 0x0000000744e00000| PB 0x0000000744e00000| Untracked | 0 -| 8|0x0000000745000000, 0x0000000745000000, 0x0000000745200000| 0%| F| |TAMS 0x0000000745000000| PB 0x0000000745000000| Untracked | 0 -| 9|0x0000000745200000, 0x0000000745200000, 0x0000000745400000| 0%| F| |TAMS 0x0000000745200000| PB 0x0000000745200000| Untracked | 0 -| 10|0x0000000745400000, 0x0000000745400000, 0x0000000745600000| 0%| F| |TAMS 0x0000000745400000| PB 0x0000000745400000| Untracked | 0 -| 11|0x0000000745600000, 0x0000000745600000, 0x0000000745800000| 0%| F| |TAMS 0x0000000745600000| PB 0x0000000745600000| Untracked | 0 -| 12|0x0000000745800000, 0x0000000745800000, 0x0000000745a00000| 0%| F| |TAMS 0x0000000745800000| PB 0x0000000745800000| Untracked | 0 -| 13|0x0000000745a00000, 0x0000000745a00000, 0x0000000745c00000| 0%| F| |TAMS 0x0000000745a00000| PB 0x0000000745a00000| Untracked | 0 -| 14|0x0000000745c00000, 0x0000000745c00000, 0x0000000745e00000| 0%| F| |TAMS 0x0000000745c00000| PB 0x0000000745c00000| Untracked | 0 -| 15|0x0000000745e00000, 0x0000000745e00000, 0x0000000746000000| 0%| F| |TAMS 0x0000000745e00000| PB 0x0000000745e00000| Untracked | 0 -| 16|0x0000000746000000, 0x0000000746000000, 0x0000000746200000| 0%| F| |TAMS 0x0000000746000000| PB 0x0000000746000000| Untracked | 0 -| 17|0x0000000746200000, 0x0000000746200000, 0x0000000746400000| 0%| F| |TAMS 0x0000000746200000| PB 0x0000000746200000| Untracked | 0 -| 18|0x0000000746400000, 0x0000000746400000, 0x0000000746600000| 0%| F| |TAMS 0x0000000746400000| PB 0x0000000746400000| Untracked | 0 -| 19|0x0000000746600000, 0x0000000746600000, 0x0000000746800000| 0%| F| |TAMS 0x0000000746600000| PB 0x0000000746600000| Untracked | 0 -| 20|0x0000000746800000, 0x0000000746800000, 0x0000000746a00000| 0%| F| |TAMS 0x0000000746800000| PB 0x0000000746800000| Untracked | 0 -| 21|0x0000000746a00000, 0x0000000746a00000, 0x0000000746c00000| 0%| F| |TAMS 0x0000000746a00000| PB 0x0000000746a00000| Untracked | 0 -| 22|0x0000000746c00000, 0x0000000746c00000, 0x0000000746e00000| 0%| F| |TAMS 0x0000000746c00000| PB 0x0000000746c00000| Untracked | 0 -| 23|0x0000000746e00000, 0x0000000746e00000, 0x0000000747000000| 0%| F| |TAMS 0x0000000746e00000| PB 0x0000000746e00000| Untracked | 0 -| 24|0x0000000747000000, 0x0000000747000000, 0x0000000747200000| 0%| F| |TAMS 0x0000000747000000| PB 0x0000000747000000| Untracked | 0 -| 25|0x0000000747200000, 0x0000000747200000, 0x0000000747400000| 0%| F| |TAMS 0x0000000747200000| PB 0x0000000747200000| Untracked | 0 -| 26|0x0000000747400000, 0x0000000747400000, 0x0000000747600000| 0%| F| |TAMS 0x0000000747400000| PB 0x0000000747400000| Untracked | 0 -| 27|0x0000000747600000, 0x0000000747600000, 0x0000000747800000| 0%| F| |TAMS 0x0000000747600000| PB 0x0000000747600000| Untracked | 0 -| 28|0x0000000747800000, 0x0000000747800000, 0x0000000747a00000| 0%| F| |TAMS 0x0000000747800000| PB 0x0000000747800000| Untracked | 0 -| 29|0x0000000747a00000, 0x0000000747a00000, 0x0000000747c00000| 0%| F| |TAMS 0x0000000747a00000| PB 0x0000000747a00000| Untracked | 0 -| 30|0x0000000747c00000, 0x0000000747c00000, 0x0000000747e00000| 0%| F| |TAMS 0x0000000747c00000| PB 0x0000000747c00000| Untracked | 0 -| 31|0x0000000747e00000, 0x0000000747e00000, 0x0000000748000000| 0%| F| |TAMS 0x0000000747e00000| PB 0x0000000747e00000| Untracked | 0 -| 32|0x0000000748000000, 0x0000000748000000, 0x0000000748200000| 0%| F| |TAMS 0x0000000748000000| PB 0x0000000748000000| Untracked | 0 -| 33|0x0000000748200000, 0x0000000748200000, 0x0000000748400000| 0%| F| |TAMS 0x0000000748200000| PB 0x0000000748200000| Untracked | 0 -| 34|0x0000000748400000, 0x0000000748400000, 0x0000000748600000| 0%| F| |TAMS 0x0000000748400000| PB 0x0000000748400000| Untracked | 0 -| 35|0x0000000748600000, 0x0000000748600000, 0x0000000748800000| 0%| F| |TAMS 0x0000000748600000| PB 0x0000000748600000| Untracked | 0 -| 36|0x0000000748800000, 0x0000000748800000, 0x0000000748a00000| 0%| F| |TAMS 0x0000000748800000| PB 0x0000000748800000| Untracked | 0 -| 37|0x0000000748a00000, 0x0000000748a00000, 0x0000000748c00000| 0%| F| |TAMS 0x0000000748a00000| PB 0x0000000748a00000| Untracked | 0 -| 38|0x0000000748c00000, 0x0000000748c00000, 0x0000000748e00000| 0%| F| |TAMS 0x0000000748c00000| PB 0x0000000748c00000| Untracked | 0 -| 39|0x0000000748e00000, 0x0000000748e00000, 0x0000000749000000| 0%| F| |TAMS 0x0000000748e00000| PB 0x0000000748e00000| Untracked | 0 -| 40|0x0000000749000000, 0x0000000749000000, 0x0000000749200000| 0%| F| |TAMS 0x0000000749000000| PB 0x0000000749000000| Untracked | 0 -| 41|0x0000000749200000, 0x0000000749200000, 0x0000000749400000| 0%| F| |TAMS 0x0000000749200000| PB 0x0000000749200000| Untracked | 0 -| 42|0x0000000749400000, 0x0000000749400000, 0x0000000749600000| 0%| F| |TAMS 0x0000000749400000| PB 0x0000000749400000| Untracked | 0 -| 43|0x0000000749600000, 0x0000000749600000, 0x0000000749800000| 0%| F| |TAMS 0x0000000749600000| PB 0x0000000749600000| Untracked | 0 -| 44|0x0000000749800000, 0x0000000749800000, 0x0000000749a00000| 0%| F| |TAMS 0x0000000749800000| PB 0x0000000749800000| Untracked | 0 -| 45|0x0000000749a00000, 0x0000000749a00000, 0x0000000749c00000| 0%| F| |TAMS 0x0000000749a00000| PB 0x0000000749a00000| Untracked | 0 -| 46|0x0000000749c00000, 0x0000000749c00000, 0x0000000749e00000| 0%| F| |TAMS 0x0000000749c00000| PB 0x0000000749c00000| Untracked | 0 -| 47|0x0000000749e00000, 0x0000000749e00000, 0x000000074a000000| 0%| F| |TAMS 0x0000000749e00000| PB 0x0000000749e00000| Untracked | 0 -| 48|0x000000074a000000, 0x000000074a000000, 0x000000074a200000| 0%| F| |TAMS 0x000000074a000000| PB 0x000000074a000000| Untracked | 0 -| 49|0x000000074a200000, 0x000000074a200000, 0x000000074a400000| 0%| F| |TAMS 0x000000074a200000| PB 0x000000074a200000| Untracked | 0 -| 50|0x000000074a400000, 0x000000074a400000, 0x000000074a600000| 0%| F| |TAMS 0x000000074a400000| PB 0x000000074a400000| Untracked | 0 -| 51|0x000000074a600000, 0x000000074a600000, 0x000000074a800000| 0%| F| |TAMS 0x000000074a600000| PB 0x000000074a600000| Untracked | 0 -| 52|0x000000074a800000, 0x000000074a800000, 0x000000074aa00000| 0%| F| |TAMS 0x000000074a800000| PB 0x000000074a800000| Untracked | 0 -| 53|0x000000074aa00000, 0x000000074aa00000, 0x000000074ac00000| 0%| F| |TAMS 0x000000074aa00000| PB 0x000000074aa00000| Untracked | 0 -| 54|0x000000074ac00000, 0x000000074ac00000, 0x000000074ae00000| 0%| F| |TAMS 0x000000074ac00000| PB 0x000000074ac00000| Untracked | 0 -| 55|0x000000074ae00000, 0x000000074ae00000, 0x000000074b000000| 0%| F| |TAMS 0x000000074ae00000| PB 0x000000074ae00000| Untracked | 0 -| 56|0x000000074b000000, 0x000000074b000000, 0x000000074b200000| 0%| F| |TAMS 0x000000074b000000| PB 0x000000074b000000| Untracked | 0 -| 57|0x000000074b200000, 0x000000074b3a3e48, 0x000000074b400000| 82%| E| |TAMS 0x000000074b200000| PB 0x000000074b200000| Complete | 0 -| 58|0x000000074b400000, 0x000000074b600000, 0x000000074b600000|100%| E|CS|TAMS 0x000000074b400000| PB 0x000000074b400000| Complete | 0 -| 59|0x000000074b600000, 0x000000074b800000, 0x000000074b800000|100%| E|CS|TAMS 0x000000074b600000| PB 0x000000074b600000| Complete | 0 -| 60|0x000000074b800000, 0x000000074ba00000, 0x000000074ba00000|100%| E|CS|TAMS 0x000000074b800000| PB 0x000000074b800000| Complete | 0 -| 61|0x000000074ba00000, 0x000000074bc00000, 0x000000074bc00000|100%| E|CS|TAMS 0x000000074ba00000| PB 0x000000074ba00000| Complete | 0 -| 62|0x000000074bc00000, 0x000000074be00000, 0x000000074be00000|100%| E|CS|TAMS 0x000000074bc00000| PB 0x000000074bc00000| Complete | 0 -| 63|0x000000074be00000, 0x000000074c000000, 0x000000074c000000|100%| E|CS|TAMS 0x000000074be00000| PB 0x000000074be00000| Complete | 0 -| 64|0x000000074c000000, 0x000000074c200000, 0x000000074c200000|100%| E|CS|TAMS 0x000000074c000000| PB 0x000000074c000000| Complete | 0 -| 65|0x000000074c200000, 0x000000074c400000, 0x000000074c400000|100%| E|CS|TAMS 0x000000074c200000| PB 0x000000074c200000| Complete | 0 -| 66|0x000000074c400000, 0x000000074c600000, 0x000000074c600000|100%| E|CS|TAMS 0x000000074c400000| PB 0x000000074c400000| Complete | 0 -| 67|0x000000074c600000, 0x000000074c740000, 0x000000074c800000| 62%| S|CS|TAMS 0x000000074c600000| PB 0x000000074c600000| Complete | 0 -| 68|0x000000074c800000, 0x000000074ca00000, 0x000000074ca00000|100%| S|CS|TAMS 0x000000074c800000| PB 0x000000074c800000| Complete | 0 -| 69|0x000000074ca00000, 0x000000074cc00000, 0x000000074cc00000|100%| S|CS|TAMS 0x000000074ca00000| PB 0x000000074ca00000| Complete | 0 -| 70|0x000000074cc00000, 0x000000074ce00000, 0x000000074ce00000|100%| E|CS|TAMS 0x000000074cc00000| PB 0x000000074cc00000| Complete | 0 -| 71|0x000000074ce00000, 0x000000074d000000, 0x000000074d000000|100%| E|CS|TAMS 0x000000074ce00000| PB 0x000000074ce00000| Complete | 0 -| 72|0x000000074d000000, 0x000000074d200000, 0x000000074d200000|100%| E|CS|TAMS 0x000000074d000000| PB 0x000000074d000000| Complete | 0 -| 73|0x000000074d200000, 0x000000074d400000, 0x000000074d400000|100%| E|CS|TAMS 0x000000074d200000| PB 0x000000074d200000| Complete | 0 -| 74|0x000000074d400000, 0x000000074d600000, 0x000000074d600000|100%| E|CS|TAMS 0x000000074d400000| PB 0x000000074d400000| Complete | 0 -| 75|0x000000074d600000, 0x000000074d800000, 0x000000074d800000|100%| E|CS|TAMS 0x000000074d600000| PB 0x000000074d600000| Complete | 0 -| 76|0x000000074d800000, 0x000000074da00000, 0x000000074da00000|100%| E|CS|TAMS 0x000000074d800000| PB 0x000000074d800000| Complete | 0 -| 77|0x000000074da00000, 0x000000074dc00000, 0x000000074dc00000|100%| E|CS|TAMS 0x000000074da00000| PB 0x000000074da00000| Complete | 0 -| 78|0x000000074dc00000, 0x000000074de00000, 0x000000074de00000|100%| E|CS|TAMS 0x000000074dc00000| PB 0x000000074dc00000| Complete | 0 -| 79|0x000000074de00000, 0x000000074e000000, 0x000000074e000000|100%| E|CS|TAMS 0x000000074de00000| PB 0x000000074de00000| Complete | 0 -| 80|0x000000074e000000, 0x000000074e200000, 0x000000074e200000|100%| E|CS|TAMS 0x000000074e000000| PB 0x000000074e000000| Complete | 0 -| 81|0x000000074e200000, 0x000000074e400000, 0x000000074e400000|100%| E|CS|TAMS 0x000000074e200000| PB 0x000000074e200000| Complete | 0 -| 82|0x000000074e400000, 0x000000074e600000, 0x000000074e600000|100%| E|CS|TAMS 0x000000074e400000| PB 0x000000074e400000| Complete | 0 -| 83|0x000000074e600000, 0x000000074e800000, 0x000000074e800000|100%| E|CS|TAMS 0x000000074e600000| PB 0x000000074e600000| Complete | 0 -| 84|0x000000074e800000, 0x000000074ea00000, 0x000000074ea00000|100%| E|CS|TAMS 0x000000074e800000| PB 0x000000074e800000| Complete | 0 -| 85|0x000000074ea00000, 0x000000074ec00000, 0x000000074ec00000|100%| E|CS|TAMS 0x000000074ea00000| PB 0x000000074ea00000| Complete | 0 -| 86|0x000000074ec00000, 0x000000074ee00000, 0x000000074ee00000|100%| E|CS|TAMS 0x000000074ec00000| PB 0x000000074ec00000| Complete | 0 -| 87|0x000000074ee00000, 0x000000074f000000, 0x000000074f000000|100%| E|CS|TAMS 0x000000074ee00000| PB 0x000000074ee00000| Complete | 0 -| 88|0x000000074f000000, 0x000000074f200000, 0x000000074f200000|100%| E|CS|TAMS 0x000000074f000000| PB 0x000000074f000000| Complete | 0 -| 89|0x000000074f200000, 0x000000074f400000, 0x000000074f400000|100%| E|CS|TAMS 0x000000074f200000| PB 0x000000074f200000| Complete | 0 -| 90|0x000000074f400000, 0x000000074f600000, 0x000000074f600000|100%| E|CS|TAMS 0x000000074f400000| PB 0x000000074f400000| Complete | 0 -| 91|0x000000074f600000, 0x000000074f800000, 0x000000074f800000|100%| E|CS|TAMS 0x000000074f600000| PB 0x000000074f600000| Complete | 0 -| 92|0x000000074f800000, 0x000000074fa00000, 0x000000074fa00000|100%| E|CS|TAMS 0x000000074f800000| PB 0x000000074f800000| Complete | 0 -| 93|0x000000074fa00000, 0x000000074fc00000, 0x000000074fc00000|100%| E|CS|TAMS 0x000000074fa00000| PB 0x000000074fa00000| Complete | 0 -|1503|0x00000007ffe00000, 0x00000007fff3b568, 0x0000000800000000| 61%| O| |TAMS 0x00000007ffe00000| PB 0x00000007ffe00000| Untracked | 0 - -Card table byte_map: [0x000001815c530000,0x000001815cb10000] _byte_map_base: 0x0000018158b10000 - -Marking Bits: (CMBitMap*) 0x0000018142941ee0 - Bits: [0x000001815cb10000, 0x000001815fa10000) - -Polling page: 0x0000018140570000 - -Metaspace: -Metaspace used 19444K, committed 20672K, reserved 1114112K - class space used 1449K, committed 1984K, reserved 1048576K - -Usage: - Non-class: 17.57 MB used. - Class: 1.42 MB used. - Both: 18.99 MB used. - -Virtual space: - Non-class space: 64.00 MB reserved, 18.25 MB ( 29%) committed, 1 nodes. - Class space: 1.00 GB reserved, 1.94 MB ( <1%) committed, 1 nodes. - Both: 1.06 GB reserved, 20.19 MB ( 2%) committed. - -Chunk freelists: - Non-Class: 13.54 MB - Class: 14.03 MB - Both: 27.57 MB - -MaxMetaspaceSize: unlimited -CompressedClassSpaceSize: 1.00 GB -Initial GC threshold: 21.00 MB -Current GC threshold: 21.00 MB -CDS: on - - commit_granule_bytes: 65536. - - commit_granule_words: 8192. - - virtual_space_node_default_size: 8388608. - - enlarge_chunks_in_place: 1. -UseCompressedClassPointers 1, UseCompactObjectHeaders 0 -Narrow klass pointer bits 32, Max shift 3 -Narrow klass base: 0x000000000e000000, Narrow klass shift: 0 -Encoding Range: [0x000000000e000000 - 0x000000010e000000), (4294967296 bytes) -Klass Range: [0x000000000e010000 - 0x000000004f000000), (1090453504 bytes) -Klass ID Range: [65536 - 1090519033) (1090453497) -Protection zone: [0x000000000e000000 - 0x000000000e010000), (65536 bytes) - - -Internal statistics: - -num_allocs_failed_limit: 0. -num_arena_births: 1756. -num_arena_deaths: 0. -num_vsnodes_births: 2. -num_vsnodes_deaths: 0. -num_space_committed: 323. -num_space_uncommitted: 0. -num_chunks_returned_to_freelist: 0. -num_chunks_taken_from_freelist: 2676. -num_chunk_merges: 0. -num_chunk_splits: 1783. -num_chunks_enlarged: 1027. -num_inconsistent_stats: 0. - -CodeHeap 'non-profiled nmethods': size=119808Kb used=1686Kb max_used=1686Kb free=118121Kb - bounds [0x0000018154720000, 0x0000018154990000, 0x000001815bc20000] -CodeHeap 'profiled nmethods': size=119744Kb used=20609Kb max_used=20609Kb free=99134Kb - bounds [0x000001814cc20000, 0x000001814e050000, 0x0000018154110000] -CodeHeap 'non-nmethods': size=6208Kb used=4214Kb max_used=4222Kb free=1993Kb - bounds [0x0000018154110000, 0x0000018154540000, 0x0000018154720000] -CodeCache: size=245760Kb, used=26509Kb, max_used=26517Kb, free=219248Kb - total_blobs=7002, nmethods=4825, adapters=2032, full_count=0 -Compilation: enabled, stopped_count=0, restarted_count=0 - -JVMCI Events (20 events): -Event: 15.294 Thread 0x00000181428f8b50 shut down JVMCI runtime 0 -Event: 15.299 Thread 0x00000181428f8b50 destroyed JavaVM[0]@0x00000181679d3a90 for JVMCI runtime 0 -Event: 15.299 Thread 0x00000181428f8b50 releasing handles for JVMCI runtime 0: oop handles=178, metadata handles={total=1280, live=767, blocks=40} -Event: 15.299 Thread 0x00000181428f8b50 detached from JVMCI runtime 0 -Event: 15.307 Thread 0x00000181428f8b50 attached to JVMCI runtime 1 -Event: 15.309 Thread 0x00000181428f8b50 created JavaVM[5]@0x00000181679d3a90 for JVMCI runtime 1 -Event: 15.309 Thread 0x00000181428f8b50 initializing JVMCI runtime 1 -Event: 15.309 Thread 0x00000181428f8b50 done waiting for JavaVM references initialization in JVMCI runtime 1 -Event: 15.309 Thread 0x00000181428f8b50 initialized JVMCI runtime 1 -Event: 16.339 Thread 0x00000181428f8b50 detaching from JVMCI runtime 1: releasing idle compiler thread (0 other threads still attached) -Event: 16.339 Thread 0x00000181428f8b50 shutting down HotSpotJVMCIRuntime for JVMCI runtime 1 -Event: 16.339 Thread 0x00000181428f8b50 shut down JVMCI runtime 1 -Event: 16.340 Thread 0x00000181428f8b50 destroyed JavaVM[5]@0x00000181679d3a90 for JVMCI runtime 1 -Event: 16.340 Thread 0x00000181428f8b50 releasing handles for JVMCI runtime 1: oop handles=117, metadata handles={total=188, live=185, blocks=19} -Event: 16.340 Thread 0x00000181428f8b50 detached from JVMCI runtime 1 -Event: 17.096 Thread 0x00000181428f8b50 attached to JVMCI runtime 1 -Event: 17.099 Thread 0x00000181428f8b50 created JavaVM[6]@0x00000181679d3a90 for JVMCI runtime 1 -Event: 17.099 Thread 0x00000181428f8b50 initializing JVMCI runtime 1 -Event: 17.099 Thread 0x00000181428f8b50 done waiting for JavaVM references initialization in JVMCI runtime 1 -Event: 17.099 Thread 0x00000181428f8b50 initialized JVMCI runtime 1 - -Compilation events (20 events): -Event: 19.789 Thread 0x00000181428fa380 4918 3 java.util.HashMap::calculateHashMapCapacity (11 bytes) -Event: 19.790 Thread 0x00000181428fa380 nmethod 4918 0x000001814e02f988 code [0x000001814e02faa0, 0x000001814e02fc38] -Event: 19.823 Thread 0x00000181428fa380 4922 3 net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.TextureCache$$Lambda/0x000000000f1bfb68::accept (16 bytes) -Event: 19.824 Thread 0x00000181428fa380 nmethod 4922 0x000001814e02fc88 code [0x000001814e02fd80, 0x000001814e030550] -Event: 19.827 Thread 0x00000181428f8b50 4923 4 java.io.DataInputStream::readFloat (19 bytes) -Event: 19.886 Thread 0x00000181428f8b50 nmethod 4923 0x00000181548c3e08 code [0x00000181548c3f00, 0x00000181548c5440] -Event: 19.886 Thread 0x00000181428f8b50 4924 ! 4 java.nio.DirectFloatBufferU::put (36 bytes) -Event: 19.886 Thread 0x00000181428fa380 4925 3 net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.DeferredSceneRender$$Lambda/0x000000000f1c6688::apply (10 bytes) -Event: 19.887 Thread 0x00000181428fa380 nmethod 4925 0x000001814e030588 code [0x000001814e030680, 0x000001814e030bc8] -Event: 19.887 Thread 0x00000181428fa380 4926 3 org.lwjgl.vulkan.VkDescriptorImageInfo$Buffer::getElementFactory (5 bytes) -Event: 19.887 Thread 0x00000181428fa380 nmethod 4926 0x000001814e030c08 code [0x000001814e030d00, 0x000001814e030e80] -Event: 19.887 Thread 0x00000181428fa380 4927 3 org.lwjgl.vulkan.VkDescriptorImageInfo$Buffer::getElementFactory (4 bytes) -Event: 19.887 Thread 0x00000181428fa380 nmethod 4927 0x000001814e030f08 code [0x000001814e031000, 0x000001814e031110] -Event: 19.887 Thread 0x00000181428fa380 4928 3 org.lwjgl.vulkan.VkDescriptorImageInfo::sizeof (4 bytes) -Event: 19.887 Thread 0x00000181428fa380 nmethod 4928 0x000001814e031208 code [0x000001814e031300, 0x000001814e031410] -Event: 19.887 Thread 0x00000181428fa380 4929 3 org.lwjgl.vulkan.VkDescriptorImageInfo::nimageView (11 bytes) -Event: 19.887 Thread 0x00000181428fa380 nmethod 4929 0x000001814e031508 code [0x000001814e031600, 0x000001814e031718] -Event: 19.887 Thread 0x00000181428fa380 4930 3 org.lwjgl.vulkan.VkDescriptorImageInfo::nsampler (11 bytes) -Event: 19.887 Thread 0x00000181428fa380 nmethod 4930 0x000001814e031808 code [0x000001814e031900, 0x000001814e031a10] -Event: 19.887 Thread 0x00000181428fa380 4931 3 org.lwjgl.vulkan.VkDescriptorImageInfo::nimageLayout (11 bytes) - -GC Heap Usage History (2 events): -Event: 1.318 {heap Before GC invocations=0 (full 0): - garbage-first heap total reserved 3080192K, committed 194560K, used 48365K [0x0000000744000000, 0x0000000800000000) - region size 2048K, 24 young (49152K), 0 survivors (0K) -} -Event: 1.322 {heap After GC invocations=1 (full 0): - garbage-first heap total reserved 3080192K, committed 194560K, used 6637K [0x0000000744000000, 0x0000000800000000) - region size 2048K, 3 young (6144K), 3 survivors (6144K) -} - -Metaspace Usage History (2 events): -Event: 1.318 {metaspace Before GC invocations=0 (full 0): - Metaspace used 12121K, committed 12864K, reserved 1114112K - class space used 929K, committed 1216K, reserved 1048576K -} -Event: 1.322 {metaspace After GC invocations=1 (full 0): - Metaspace used 12121K, committed 12864K, reserved 1114112K - class space used 929K, committed 1216K, reserved 1048576K -} - -Dll operation events (13 events): -Event: 0.006 Loaded shared library C:\Users\Hal\.jdks\graalvm-jdk-25\bin\java.dll -Event: 0.050 Loaded shared library C:\Users\Hal\.jdks\graalvm-jdk-25\bin\jvmcicompiler.dll -Event: 0.105 Loaded shared library C:\Users\Hal\.jdks\graalvm-jdk-25\bin\net.dll -Event: 0.106 Loaded shared library C:\Users\Hal\.jdks\graalvm-jdk-25\bin\nio.dll -Event: 0.109 Loaded shared library C:\Users\Hal\.jdks\graalvm-jdk-25\bin\zip.dll -Event: 0.125 Loaded shared library C:\Users\Hal\.jdks\graalvm-jdk-25\bin\management.dll -Event: 0.127 Loaded shared library C:\Users\Hal\.jdks\graalvm-jdk-25\bin\management_ext.dll -Event: 0.144 Loaded shared library C:\Users\Hal\.jdks\graalvm-jdk-25\bin\jimage.dll -Event: 0.264 Loaded shared library C:\Users\Hal\.jdks\graalvm-jdk-25\bin\verify.dll -Event: 0.321 Loaded shared library C:\Users\Hal\AppData\Local\Temp\lwjgl_Hal\3.4.1+2\x64\lwjgl.dll -Event: 0.859 Loaded shared library C:\Users\Hal\AppData\Local\Temp\lwjgl_Hal\3.4.1+2\x64\lwjgl_stb.dll -Event: 1.593 Loaded shared library C:\Users\Hal\AppData\Local\Temp\lwjgl_Hal\3.4.1+2\x64\lwjgl_vma.dll -Event: 1.781 Loaded shared library C:\Users\Hal\AppData\Local\Temp\imgui-java-natives\1.92.0\imgui-java64.dll - -Deoptimization events (20 events): -Event: 17.514 Thread 0x000001816240f970 Uncommon trap: trap_request=0xffffffdd fr.pc=0x000001815483c6e9 relative=0x0000000000000b69 -Event: 17.514 Thread 0x000001816240f970 Uncommon trap: reason=class_check action=reinterpret pc=0x000001815483c6e9 method=net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.Texture.SetTransparency(Ljava/nio/ByteBuffer;)V @ 0 jvmci -Event: 17.514 Thread 0x000001816240f970 DEOPT PACKING pc=0x000001815483c6e9 sp=0x0000002dc9efe010 -Event: 17.514 Thread 0x000001816240f970 DEOPT UNPACKING pc=0x0000018154164403 sp=0x0000002dc9efd4f8 mode 3 -Event: 17.526 Thread 0x000001816240f970 DEOPT PACKING pc=0x000001814dd65723 sp=0x0000002dc9efdef0 -Event: 17.526 Thread 0x000001816240f970 DEOPT UNPACKING pc=0x0000018154164403 sp=0x0000002dc9efd3a8 mode 0 -Event: 17.932 Thread 0x000001816240f970 DEOPT PACKING pc=0x000001814dd65723 sp=0x0000002dc9efdea0 -Event: 17.932 Thread 0x000001816240f970 DEOPT UNPACKING pc=0x0000018154164403 sp=0x0000002dc9efd358 mode 0 -Event: 17.975 Thread 0x000001816240f970 DEOPT PACKING pc=0x000001814dd65723 sp=0x0000002dc9efdea0 -Event: 17.975 Thread 0x000001816240f970 DEOPT UNPACKING pc=0x0000018154164403 sp=0x0000002dc9efd358 mode 0 -Event: 17.991 Thread 0x000001816240f970 DEOPT PACKING pc=0x000001814dd65723 sp=0x0000002dc9efdff0 -Event: 17.991 Thread 0x000001816240f970 DEOPT UNPACKING pc=0x0000018154164403 sp=0x0000002dc9efd4a8 mode 0 -Event: 18.004 Thread 0x000001816240f970 DEOPT PACKING pc=0x000001814dd65723 sp=0x0000002dc9efdff0 -Event: 18.004 Thread 0x000001816240f970 DEOPT UNPACKING pc=0x0000018154164403 sp=0x0000002dc9efd4a8 mode 0 -Event: 18.016 Thread 0x000001816240f970 DEOPT PACKING pc=0x000001814dd65723 sp=0x0000002dc9efdff0 -Event: 18.016 Thread 0x000001816240f970 DEOPT UNPACKING pc=0x0000018154164403 sp=0x0000002dc9efd4a8 mode 0 -Event: 18.029 Thread 0x000001816240f970 DEOPT PACKING pc=0x000001814dd65723 sp=0x0000002dc9efdff0 -Event: 18.029 Thread 0x000001816240f970 DEOPT UNPACKING pc=0x0000018154164403 sp=0x0000002dc9efd4a8 mode 0 -Event: 18.488 Thread 0x000001816240f970 DEOPT PACKING pc=0x000001814d387058 sp=0x0000002dc9efdba0 -Event: 18.488 Thread 0x000001816240f970 DEOPT UNPACKING pc=0x0000018154164403 sp=0x0000002dc9efd018 mode 0 - -Classes loaded (20 events): -Event: 3.392 Loading class java/lang/System$Logger$Level -Event: 3.392 Loading class java/lang/System$Logger$Level done -Event: 3.392 Loading class jdk/internal/logger/SurrogateLogger -Event: 3.392 Loading class jdk/internal/logger/SimpleConsoleLogger -Event: 3.393 Loading class sun/util/logging/PlatformLogger$ConfigurableBridge$LoggerConfiguration -Event: 3.393 Loading class sun/util/logging/PlatformLogger$ConfigurableBridge$LoggerConfiguration done -Event: 3.393 Loading class jdk/internal/logger/SimpleConsoleLogger done -Event: 3.393 Loading class jdk/internal/logger/SurrogateLogger done -Event: 3.393 Loading class sun/util/logging/PlatformLogger -Event: 3.393 Loading class sun/util/logging/PlatformLogger done -Event: 3.393 Loading class sun/util/logging/PlatformLogger$Level -Event: 3.393 Loading class sun/util/logging/PlatformLogger$Level done -Event: 3.473 Loading class java/util/Formatter$FormatSpecifierParser -Event: 3.473 Loading class java/util/Formatter$FormatSpecifierParser done -Event: 3.473 Loading class jdk/internal/math/FormattedFPDecimal -Event: 3.474 Loading class jdk/internal/math/FormattedFPDecimal done -Event: 5.429 Loading class jdk/internal/access/foreign/UnmapperProxy -Event: 5.429 Loading class jdk/internal/access/foreign/UnmapperProxy done -Event: 11.411 Loading class jdk/internal/event/ThreadSleepEvent -Event: 11.411 Loading class jdk/internal/event/ThreadSleepEvent done - -Classes unloaded (0 events): -No events - -Classes redefined (0 events): -No events - -Internal exceptions (20 events): -Event: 3.492 Thread 0x000001816240f970 Exception (0x000000074de99210) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 804] -Event: 3.492 Thread 0x000001816240f970 Exception (0x000000074dea98c0) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 804] -Event: 3.493 Thread 0x000001816240f970 Exception (0x000000074decb6c8) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 804] -Event: 3.495 Thread 0x000001816240f970 Exception (0x000000074df119a0) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 804] -Event: 3.496 Thread 0x000001816240f970 Exception (0x000000074df21fb8) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 804] -Event: 3.496 Thread 0x000001816240f970 Exception (0x000000074df43a70) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 804] -Event: 3.499 Thread 0x000001816240f970 Exception (0x000000074df825e8) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 804] -Event: 3.499 Thread 0x000001816240f970 Exception (0x000000074df92b00) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 804] -Event: 3.500 Thread 0x000001816240f970 Exception (0x000000074dfb4540) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 804] -Event: 3.503 Thread 0x000001816240f970 Exception (0x000000074dff5598) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 804] -Event: 3.503 Thread 0x000001816240f970 Exception (0x000000074dc06b00) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 804] -Event: 3.504 Thread 0x000001816240f970 Exception (0x000000074dc28508) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 804] -Event: 3.507 Thread 0x000001816240f970 Exception (0x000000074dc65508) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 804] -Event: 3.508 Thread 0x000001816240f970 Exception (0x000000074dc6d958) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 804] -Event: 3.508 Thread 0x000001816240f970 Exception (0x000000074dc7de98) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 804] -Event: 3.516 Thread 0x000001816240f970 Exception (0x000000074dd13258) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 804] -Event: 3.517 Thread 0x000001816240f970 Exception (0x000000074dd23928) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 804] -Event: 3.517 Thread 0x000001816240f970 Exception (0x000000074dd45758) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 804] -Event: 17.096 Thread 0x000001816240f970 Exception (0x000000074b6143d0) -thrown [s\open\src\hotspot\share\interpreter\linkResolver.cpp, line 804] -Event: 17.514 Thread 0x000001816240f970 Implicit null exception at 0x000001815483bbe2 to 0x000001815483c6ce - -VM Operations (20 events): -Event: 10.370 Executing safepoint VM operation: ThreadDump -Event: 10.371 Executing safepoint VM operation: ThreadDump done -Event: 11.363 Executing safepoint VM operation: ThreadDump -Event: 11.363 Executing safepoint VM operation: ThreadDump done -Event: 12.325 Executing safepoint VM operation: ThreadDump -Event: 12.325 Executing safepoint VM operation: ThreadDump done -Event: 13.406 Executing safepoint VM operation: ThreadDump -Event: 13.407 Executing safepoint VM operation: ThreadDump done -Event: 14.323 Executing safepoint VM operation: ThreadDump -Event: 14.324 Executing safepoint VM operation: ThreadDump done -Event: 15.326 Executing safepoint VM operation: ThreadDump -Event: 15.326 Executing safepoint VM operation: ThreadDump done -Event: 16.327 Executing safepoint VM operation: ThreadDump -Event: 16.327 Executing safepoint VM operation: ThreadDump done -Event: 17.421 Executing safepoint VM operation: ThreadDump -Event: 17.421 Executing safepoint VM operation: ThreadDump done -Event: 18.516 Executing safepoint VM operation: ThreadDump -Event: 18.516 Executing safepoint VM operation: ThreadDump done -Event: 19.783 Executing safepoint VM operation: ThreadDump -Event: 19.783 Executing safepoint VM operation: ThreadDump done - -Memory protections (0 events): -No events - -Nmethod flushes (0 events): -No events - -Events (20 events): -Event: 0.029 Thread 0x00000181401f6960 Thread added: 0x00000181428f8b50 -Event: 0.029 Thread 0x00000181401f6960 Thread added: 0x00000181428fa380 -Event: 0.065 Thread 0x00000181428fa380 Thread added: 0x00000181428f52e0 -Event: 0.084 Thread 0x00000181428fa380 Thread added: 0x00000181428f9360 -Event: 0.097 Thread 0x00000181401f6960 Thread added: 0x00000181625e4140 -Event: 0.100 Thread 0x00000181401f6960 Thread added: 0x00000181625e4b00 -Event: 0.239 Thread 0x00000181401f6960 Thread added: 0x000001810004d9c0 -Event: 2.154 Thread 0x00000181428f9360 Thread exited: 0x00000181428f9360 -Event: 3.334 Thread 0x0000018103d2e060 Thread added: 0x0000018103d2e060 -Event: 3.464 Thread 0x00000181401f6960 Thread added: 0x0000018103d2f000 -Event: 3.464 Thread 0x00000181401f6960 Thread added: 0x000001816240f970 -Event: 3.464 Thread 0x00000181401f6960 Thread added: 0x000001810484a030 -Event: 3.526 Thread 0x00000181428fa380 Thread added: 0x0000018100c272a0 -Event: 3.970 Thread 0x0000018100c272a0 Thread exited: 0x0000018100c272a0 -Event: 5.139 Thread 0x00000181428fa380 Thread added: 0x000001812bbedf50 -Event: 5.374 Thread 0x000001812bbedf50 Thread exited: 0x000001812bbedf50 -Event: 10.098 Thread 0x00000181428f52e0 Thread exited: 0x00000181428f52e0 -Event: 17.308 Thread 0x00000181428fa380 Thread added: 0x000001810028b750 -Event: 17.338 Thread 0x0000018103d2e060 Thread exited: 0x0000018103d2e060 -Event: 19.756 Thread 0x000001812cb2b9d0 Thread added: 0x000001812cb2b9d0 - - -Dynamic libraries: -0x00007ff7d6280000 - 0x00007ff7d6290000 C:\Users\Hal\.jdks\graalvm-jdk-25\bin\java.exe -0x00007ffe8a170000 - 0x00007ffe8a369000 C:\WINDOWS\SYSTEM32\ntdll.dll -0x00007ffe8a060000 - 0x00007ffe8a122000 C:\WINDOWS\System32\KERNEL32.DLL -0x00007ffe878a0000 - 0x00007ffe87b97000 C:\WINDOWS\System32\KERNELBASE.dll -0x00007ffe87f10000 - 0x00007ffe88010000 C:\WINDOWS\System32\ucrtbase.dll -0x00007ffe80f10000 - 0x00007ffe80f27000 C:\Users\Hal\.jdks\graalvm-jdk-25\bin\jli.dll -0x00007ffe80ee0000 - 0x00007ffe80efe000 C:\Users\Hal\.jdks\graalvm-jdk-25\bin\VCRUNTIME140.dll -0x00007ffe88370000 - 0x00007ffe8850d000 C:\WINDOWS\System32\USER32.dll -0x00007ffe87d70000 - 0x00007ffe87d92000 C:\WINDOWS\System32\win32u.dll -0x00007ffe88170000 - 0x00007ffe8819b000 C:\WINDOWS\System32\GDI32.dll -0x00007ffe74860000 - 0x00007ffe74afb000 C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.19041.6926_none_60b5a53971f8f7e6\COMCTL32.dll -0x00007ffe87c50000 - 0x00007ffe87d6a000 C:\WINDOWS\System32\gdi32full.dll -0x00007ffe88e10000 - 0x00007ffe88eae000 C:\WINDOWS\System32\msvcrt.dll -0x00007ffe87e70000 - 0x00007ffe87f0d000 C:\WINDOWS\System32\msvcp_win.dll -0x00007ffe89cd0000 - 0x00007ffe89cff000 C:\WINDOWS\System32\IMM32.DLL -0x00007ffe87870000 - 0x00007ffe87897000 C:\WINDOWS\System32\bcrypt.dll -0x00007ffe832a0000 - 0x00007ffe832ac000 C:\Users\Hal\.jdks\graalvm-jdk-25\bin\vcruntime140_1.dll -0x00007ffe6c110000 - 0x00007ffe6c19d000 C:\Users\Hal\.jdks\graalvm-jdk-25\bin\msvcp140.dll -0x00007ffdbebe0000 - 0x00007ffdbfb0e000 C:\Users\Hal\.jdks\graalvm-jdk-25\bin\server\jvm.dll -0x00007ffe88610000 - 0x00007ffe886c1000 C:\WINDOWS\System32\ADVAPI32.dll -0x00007ffe88510000 - 0x00007ffe885af000 C:\WINDOWS\System32\sechost.dll -0x00007ffe892d0000 - 0x00007ffe893f6000 C:\WINDOWS\System32\RPCRT4.dll -0x00007ffe89400000 - 0x00007ffe8946b000 C:\WINDOWS\System32\WS2_32.dll -0x00007ffe87630000 - 0x00007ffe8767b000 C:\WINDOWS\SYSTEM32\POWRPROF.dll -0x00007ffe83f80000 - 0x00007ffe83f8a000 C:\WINDOWS\SYSTEM32\VERSION.dll -0x00007ffe769b0000 - 0x00007ffe769d7000 C:\WINDOWS\SYSTEM32\WINMM.dll -0x00007ffe87610000 - 0x00007ffe87622000 C:\WINDOWS\SYSTEM32\UMPDC.dll -0x00007ffe85fe0000 - 0x00007ffe85ff2000 C:\WINDOWS\SYSTEM32\kernel.appcore.dll -0x00007ffe83270000 - 0x00007ffe8327a000 C:\Users\Hal\.jdks\graalvm-jdk-25\bin\jimage.dll -0x00007ffe85cd0000 - 0x00007ffe85ed1000 C:\WINDOWS\SYSTEM32\DBGHELP.DLL -0x00007ffe73480000 - 0x00007ffe734b4000 C:\WINDOWS\SYSTEM32\dbgcore.DLL -0x00007ffe877e0000 - 0x00007ffe87862000 C:\WINDOWS\System32\bcryptPrimitives.dll -0x00007ffe71eb0000 - 0x00007ffe71ecf000 C:\Users\Hal\.jdks\graalvm-jdk-25\bin\java.dll -0x00007ffe88eb0000 - 0x00007ffe88fdb000 C:\WINDOWS\System32\ole32.dll -0x00007ffe89d00000 - 0x00007ffe8a053000 C:\WINDOWS\System32\combase.dll -0x00007ffe89550000 - 0x00007ffe89cc1000 C:\WINDOWS\System32\SHELL32.dll -0x00007ffe85460000 - 0x00007ffe85c06000 C:\WINDOWS\SYSTEM32\windows.storage.dll -0x00007ffe87570000 - 0x00007ffe8759b000 C:\WINDOWS\SYSTEM32\Wldp.dll -0x00007ffe89470000 - 0x00007ffe89546000 C:\WINDOWS\System32\OLEAUT32.dll -0x00007ffe882b0000 - 0x00007ffe8835d000 C:\WINDOWS\System32\SHCORE.dll -0x00007ffe885b0000 - 0x00007ffe8860b000 C:\WINDOWS\System32\shlwapi.dll -0x00007ffe87710000 - 0x00007ffe87734000 C:\WINDOWS\SYSTEM32\profapi.dll -0x00007ffdbc270000 - 0x00007ffdbebd6000 C:\Users\Hal\.jdks\graalvm-jdk-25\bin\jvmcicompiler.dll -0x00007ffe890c0000 - 0x00007ffe890c8000 C:\WINDOWS\System32\PSAPI.DLL -0x00007ffe88010000 - 0x00007ffe8816d000 C:\WINDOWS\System32\CRYPT32.dll -0x00007ffe876c0000 - 0x00007ffe876ee000 C:\WINDOWS\SYSTEM32\USERENV.dll -0x00007ffe875e0000 - 0x00007ffe87607000 C:\WINDOWS\SYSTEM32\ncrypt.dll -0x00007ffe86ec0000 - 0x00007ffe86efb000 C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL -0x00007ffe871e0000 - 0x00007ffe8724a000 C:\WINDOWS\SYSTEM32\MSWSOCK.dll -0x00007ffe875a0000 - 0x00007ffe875db000 C:\WINDOWS\SYSTEM32\NTASN1.dll -0x00007ffe71540000 - 0x00007ffe71552000 C:\Users\Hal\.jdks\graalvm-jdk-25\bin\net.dll -0x00007ffe6e270000 - 0x00007ffe6e286000 C:\Users\Hal\.jdks\graalvm-jdk-25\bin\nio.dll -0x00007ffe71580000 - 0x00007ffe71597000 C:\Users\Hal\.jdks\graalvm-jdk-25\bin\zip.dll -0x00007ffe76920000 - 0x00007ffe7692a000 C:\Users\Hal\.jdks\graalvm-jdk-25\bin\management.dll -0x00007ffe74d30000 - 0x00007ffe74d3c000 C:\Users\Hal\.jdks\graalvm-jdk-25\bin\management_ext.dll -0x00007ffe77730000 - 0x00007ffe77740000 C:\Users\Hal\.jdks\graalvm-jdk-25\bin\verify.dll -0x00007ffe3c390000 - 0x00007ffe3c414000 C:\Users\Hal\AppData\Local\Temp\lwjgl_Hal\3.4.1+2\x64\lwjgl.dll -0x00007ffe3c300000 - 0x00007ffe3c38a000 C:\Users\Hal\AppData\Local\Temp\lwjgl_Hal\3.4.1+2\x64\glfw.dll -0x00007ffe5aeb0000 - 0x00007ffe5aef5000 C:\WINDOWS\SYSTEM32\dinput8.dll -0x00007ffe69bd0000 - 0x00007ffe69be1000 C:\WINDOWS\SYSTEM32\xinput1_4.dll -0x00007ffe87e20000 - 0x00007ffe87e6e000 C:\WINDOWS\System32\cfgmgr32.dll -0x00007ffe86bb0000 - 0x00007ffe86be3000 C:\WINDOWS\SYSTEM32\DEVOBJ.dll -0x00007ffe84f80000 - 0x00007ffe84faf000 C:\WINDOWS\SYSTEM32\dwmapi.dll -0x00007ffe65380000 - 0x00007ffe654d2000 C:\WINDOWS\SYSTEM32\inputhost.dll -0x00007ffe82480000 - 0x00007ffe827db000 C:\WINDOWS\SYSTEM32\CoreUIComponents.dll -0x00007ffe847c0000 - 0x00007ffe848b4000 C:\WINDOWS\SYSTEM32\PROPSYS.dll -0x00007ffe83e20000 - 0x00007ffe83f77000 C:\WINDOWS\SYSTEM32\wintypes.dll -0x00007ffe82380000 - 0x00007ffe82472000 C:\WINDOWS\SYSTEM32\CoreMessaging.dll -0x00007ffe86cf0000 - 0x00007ffe86d23000 C:\WINDOWS\SYSTEM32\ntmarta.dll -0x00007ffe84e70000 - 0x00007ffe84f0e000 C:\WINDOWS\system32\uxtheme.dll -0x00007ffe89130000 - 0x00007ffe89245000 C:\WINDOWS\System32\MSCTF.dll -0x00007ffe31680000 - 0x00007ffe31828000 C:\WINDOWS\SYSTEM32\vulkan-1.dll -0x00007ffe86020000 - 0x00007ffe86116000 C:\WINDOWS\system32\dxgi.dll -0x00007ffe72880000 - 0x00007ffe72891000 C:\WINDOWS\SYSTEM32\windows.staterepositorycore.dll -0x00007ffe2c250000 - 0x00007ffe2d8a6000 C:\WINDOWS\System32\DriverStore\FileRepository\iigd_dch.inf_amd64_69be0349401be4dd\igvk64.dll -0x00007ffe63fe0000 - 0x00007ffe64108000 C:\WINDOWS\system32\OpenGL32.dll -0x00007ffe64370000 - 0x00007ffe6439c000 C:\WINDOWS\SYSTEM32\GLU32.dll -0x00007ffe7ba30000 - 0x00007ffe7be39000 C:\WINDOWS\System32\DriverStore\FileRepository\iigd_dch.inf_amd64_69be0349401be4dd\igdgmm64.dll -0x00007ffe78290000 - 0x00007ffe7ba26000 C:\WINDOWS\System32\DriverStore\FileRepository\iigd_dch.inf_amd64_69be0349401be4dd\igc64.dll -0x00007ffe2be90000 - 0x00007ffe2c24f000 C:\WINDOWS\System32\DriverStore\FileRepository\iigd_dch.inf_amd64_69be0349401be4dd\igdmd64.dll -0x00007ffe65ca0000 - 0x00007ffe65d99000 C:\WINDOWS\SYSTEM32\textinputframework.dll -0x00007ffe2dc20000 - 0x00007ffe2de90000 C:\Users\Hal\AppData\Local\Temp\lwjgl_Hal\3.4.1+2\x64\jemalloc.dll -0x00007ffe3c260000 - 0x00007ffe3c2fa000 C:\Users\Hal\AppData\Local\Temp\lwjgl_Hal\3.4.1+2\x64\lwjgl_stb.dll -0x00007ffe839a0000 - 0x00007ffe83a4e000 C:\WINDOWS\SYSTEM32\mscms.dll -0x00007ffe83850000 - 0x00007ffe83861000 C:\WINDOWS\SYSTEM32\ColorAdapterClient.dll -0x00007ffe5e7e0000 - 0x00007ffe5e825000 C:\WINDOWS\SYSTEM32\icm32.dll -0x00007ffe2bbb0000 - 0x00007ffe2be82000 C:\Users\Hal\AppData\Local\Temp\lwjgl_Hal\3.4.1+2\x64\OpenAL.dll -0x00007ffe83c60000 - 0x00007ffe83c6a000 C:\WINDOWS\SYSTEM32\AVRT.dll -0x00007ffe881a0000 - 0x00007ffe88249000 C:\WINDOWS\System32\clbcatq.dll -0x00007ffe7f1e0000 - 0x00007ffe7f265000 C:\WINDOWS\System32\MMDevApi.dll -0x00007ffe7e4e0000 - 0x00007ffe7e661000 C:\WINDOWS\SYSTEM32\AUDIOSES.DLL -0x00007ffe84ce0000 - 0x00007ffe84cf4000 C:\WINDOWS\SYSTEM32\resourcepolicyclient.dll -0x00007ffe87410000 - 0x00007ffe87428000 C:\WINDOWS\SYSTEM32\CRYPTSP.dll -0x00007ffe86720000 - 0x00007ffe86758000 C:\WINDOWS\system32\rsaenh.dll -0x00007ffe87400000 - 0x00007ffe8740c000 C:\WINDOWS\SYSTEM32\CRYPTBASE.dll -0x00007ffe88360000 - 0x00007ffe88368000 C:\WINDOWS\System32\NSI.dll -0x00007ffe45470000 - 0x00007ffe454bd000 C:\ProgramData\obs-studio-hook\graphics-hook64.dll -0x00007ffe3c1f0000 - 0x00007ffe3c251000 C:\WINDOWS\SYSTEM32\ControlLib.dll -0x00007ffe88990000 - 0x00007ffe88e00000 C:\WINDOWS\System32\SETUPAPI.dll -0x00007ffe87da0000 - 0x00007ffe87e13000 C:\WINDOWS\System32\WINTRUST.dll -0x00007ffe869b0000 - 0x00007ffe869c2000 C:\WINDOWS\SYSTEM32\MSASN1.dll -0x00007ffe3be50000 - 0x00007ffe3bf7c000 C:\WINDOWS\System32\DriverStore\FileRepository\iigd_dch.inf_amd64_69be0349401be4dd\igdml64.dll -0x00007ffe7fbd0000 - 0x00007ffe7fcd3000 C:\Windows\System32\AppXDeploymentClient.dll -0x00007ffda3c90000 - 0x00007ffda4db0000 C:\WINDOWS\System32\DriverStore\FileRepository\iigd_dch.inf_amd64_69be0349401be4dd\ig11icd64.dll -0x00007ffe3ac20000 - 0x00007ffe3ac64000 C:\Users\Hal\AppData\Local\Temp\lwjgl_Hal\3.4.1+2\x64\lwjgl_vma.dll -0x00007ffdb7c10000 - 0x00007ffdb86a9000 C:\Users\Hal\AppData\Local\Temp\imgui-java-natives\1.92.0\imgui-java64.dll -0x00007ffe74e70000 - 0x00007ffe74ec1000 C:\WINDOWS\SYSTEM32\pdh.dll -0x00007ffe70eb0000 - 0x00007ffe70ebf000 C:\WINDOWS\System32\perfproc.dll -0x00007ffe70ea0000 - 0x00007ffe70eaf000 C:\WINDOWS\System32\perfos.dll -0x00007ffdb8ab0000 - 0x00007ffdb9cc2000 C:\VulkanSDK\1.4.335.0\Bin\VkLayer_khronos_validation.dll - -JVMTI agents: none - -dbghelp: loaded successfully - version: 4.0.5 - missing functions: none -symbol engine: initialized successfully - sym options: 0x614 - pdb path: .;C:\Users\Hal\.jdks\graalvm-jdk-25\bin;C:\WINDOWS\SYSTEM32;C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.19041.6926_none_60b5a53971f8f7e6;C:\Users\Hal\.jdks\graalvm-jdk-25\bin\server;C:\Users\Hal\AppData\Local\Temp\lwjgl_Hal\3.4.1+2\x64;C:\WINDOWS\System32\DriverStore\FileRepository\iigd_dch.inf_amd64_69be0349401be4dd;C:\VulkanSDK\1.4.335.0\Bin;C:\ProgramData\obs-studio-hook;C:\Users\Hal\AppData\Local\Temp\imgui-java-natives\1.92.0 - -VM Arguments: -jvm_args: -XX:ThreadPriorityPolicy=1 -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCIProduct -XX:+EnableJVMCI -XX:-UnlockExperimentalVMOptions -Dfile.encoding=UTF-8 -Duser.country=GB -Duser.language=en -Duser.variant -java_command: net.halbear.Executable.Init -java_class_path (initial): C:\Users\Hal\IONOS HiDrive\Terrain4J Dev Tools\Terrain4J Skybox Deferred Branch\terrain4j\build\classes\java\main;C:\Users\Hal\IONOS HiDrive\Terrain4J Dev Tools\Terrain4J Skybox Deferred Branch\terrain4j\build\resources\main;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\io.github.spair\imgui-java-lwjgl3\1.92.0\172b9eb03e2f54a449d4e5a2a62ecb31695c3ca0\imgui-java-lwjgl3-1.92.0.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.tinylog\tinylog-impl\2.7.0\46a5d4d50d3302460a5143e51befdb7245ccba5d\tinylog-impl-2.7.0.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.tinylog\tinylog-api\2.7.0\17875aa7c4acfee6a9e9a83a5d1469cc0411be40\tinylog-api-2.7.0.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-glfw\3.4.1\a782b1ddd175c9107bf300fd92920579ea65e2a4\lwjgl-glfw-3.4.1.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-glfw\3.4.1\2eb4aa895ea190ba8cf4356f8cea24d3ebb40ea1\lwjgl-glfw-3.4.1-natives-windows.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-remotery\3.4.1\a478d29d616207750ac21fa43f3c40b58772ce3a\lwjgl-remotery-3.4.1.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-remotery\3.4.1\e54811ce02f6dc77f9325b1b7c9f5a20695cb6e3\lwjgl-remotery-3.4.1-natives-windows.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjglx\lwjgl3-awt\0.1.8\245db5fbcece710ebceb0a0f200bf11333504e4\lwjgl3-awt-0.1.8.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-opengl\3.4.1\830412cab823c029cda6b9729f9d2ed36cf79959\lwjgl-opengl-3.4.1.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-opengl\3.4.1\617f37ef4e2ffb727bd5e74333e8073ef43ca1ec\lwjgl-opengl-3.4.1-natives-windows.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-assimp\3.4.1\e37483d7fafa5c797e1c95b8a06c5d595bcd7b40\lwjgl-assimp-3.4.1.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-assimp\3.4.1\777f2092426f7ebc4a00e17a7b6fdf15b948bd91\lwjgl-assimp-3.4.1-natives-windows.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-fmod\3.4.1\40541e4366d52456ecaa4111f7ed2d71d389d84a\lwjgl-fmod-3.4.1.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-freetype\3.4.1\caa75a37e857efc9b0686e434d708d6420c5b6ea\lwjgl-freetype-3.4.1.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-freetype\3.4.1\32fc9cfd236aca5433d53af78bfb15f1b4c1103e\lwjgl-freetype-3.4.1-natives-windows.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-jawt\3.4.1\7639323edb9ebe54bd4d24ebf7ceb7c530f754fb\lwjgl-jawt-3.4.1.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-jemalloc\3.4.1\16b663092854fc6adfe0a941e61cae2bb2e437b6\lwjgl-jemalloc-3.4.1.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-jemalloc\3.4.1\70db8048d1aca8a6365f46f9963b8d6cd77b9e94\lwjgl-jemalloc-3.4.1-natives-windows.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-llvm\3.4.1\e1715a63936dac68a7491060eb5c9d9949c503d2\lwjgl-llvm-3.4.1.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-llvm\3.4.1\86745765d91e4da37b301a55daae690df53eb4e\lwjgl-llvm-3.4.1-natives-windows.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-lmdb\3.4.1\1826c2c9cc3efc1109bb1293b6780281c337393e\lwjgl-lmdb-3.4.1.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-lmdb\3.4.1\d6345d872ffeb6b16c84416224dcb974737df98a\lwjgl-lmdb-3.4.1-natives-windows.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-meshoptimizer\3.4.1\c523c42f2c844f0cf653a2d8b9f47fbc75884db0\lwjgl-meshoptimizer-3.4.1.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-meshoptimizer\3.4.1\ddc74be568e05c48fc2955e7061fd14ddc47d105\lwjgl-meshoptimizer-3.4.1-natives-windows.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-odbc\3.4.1\fec140aba99090ce6b17977555886128db3ad5ad\lwjgl-odbc-3.4.1.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-openal\3.4.1\8508bd60589de0539aa465b78fcf838efd07ae9a\lwjgl-openal-3.4.1.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-openal\3.4.1\8e83fdfdf65c80c9877c6fb6cb645d239ed7638\lwjgl-openal-3.4.1-natives-windows.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-rpmalloc\3.4.1\c15ec6367cad9abb72e7164655a87d6a1f66df9d\lwjgl-rpmalloc-3.4.1.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-rpmalloc\3.4.1\58eecb7ae07eb33b0b80b09cf7a7758003a30683\lwjgl-rpmalloc-3.4.1-natives-windows.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-shaderc\3.4.1\5c02c88f0d879529014c78463b76f43fdecfd272\lwjgl-shaderc-3.4.1.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-shaderc\3.4.1\daacbaeb2c1dfd00db83f4b7cc2c76901eb297bd\lwjgl-shaderc-3.4.1-natives-windows.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-stb\3.4.1\f077c3dafc31924fbe8acb0b913f08977ba27f8e\lwjgl-stb-3.4.1.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-stb\3.4.1\b4e13ece83c228ecf57354639d8555076a989d74\lwjgl-stb-3.4.1-natives-windows.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-vma\3.4.1\2c54ce10154feb1ede4d23c5947438cdbfdcc003\lwjgl-vma-3.4.1.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-vma\3.4.1\4f08490dbd8f9e08385c9f2040ff1f40c2a762d2\lwjgl-vma-3.4.1-natives-windows.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-vulkan\3.4.1\d0601fdc38890755e5638048c14cc0f7b990964b\lwjgl-vulkan-3.4.1.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-sdl\3.4.1\ec28db6e949478044c649fea25eae43b1b161971\lwjgl-sdl-3.4.1.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl\3.4.1\6105690714874b995aa7812e4f7732a21109276c\lwjgl-3.4.1.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl\3.4.1\96a217f0428ab73487f114a54179a4f41e851a04\lwjgl-3.4.1-natives-windows.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.joml\joml-primitives\1.10.0\b3ae3ae0dfee0bf5aef9f7964205cca0f3c6ea07\joml-primitives-1.10.0.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.joml\joml\1.10.8\fc0a71dad90a2cf41d82a76156a0e700af8e4f8d\joml-1.10.8.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\com.code-disaster.steamworks4j\steamworks4j-server\1.9.0\4cc2e7f084682598687d6a673457dae6f53c05eb\steamworks4j-server-1.9.0.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\com.code-disaster.steamworks4j\steamworks4j\1.9.0\d69b7f7540745a8d569a5400554e34d42e035da8\steamworks4j-1.9.0.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\com.google.code.gson\gson\2.14.0\efc0e34ede4e3204eaefb84a00e55e8c86634382\gson-2.14.0.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.jcommander\jcommander\3.0\c318eb21ed71cb04f3562d2a1a3d02905255c457\jcommander-3.0.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\io.github.spair\imgui-java-binding\1.92.0\f56a0ef3f4c0e8c140264b92ea8bbcb5b581b3b5\imgui-java-binding-1.92.0.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\io.github.spair\imgui-java-natives-windows\1.92.0\eece9b8e1d62081aa6939a723d5349aba0ce174c\imgui-java-natives-windows-1.92.0.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib-jdk8\1.8.20\73576ddf378c5b4f1f6b449fe6b119b8183fc078\kotlin-stdlib-jdk8-1.8.20.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\com.google.errorprone\error_prone_annotations\2.48.0\bbe30942a31d1778c74cb272321267eca82dc708\error_prone_annotations-2.48.0.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib-jdk7\1.8.20\3aa51faf20aae8b31e1a4bc54f8370673d7b7df4\kotlin-stdlib-jdk7-1.8.20.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib\1.8.20\e72fc5e03ec6c064c678a6bd0d955c88d55b0c4a\kotlin-stdlib-1.8.20.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib-common\1.8.20\5eddaaf234c8c49d03eebeb6a14feb7f90faca71\kotlin-stdlib-common-1.8.20.jar;C:\Users\Hal\.gradle\caches\modules-2\files-2.1\org.jetbrains\annotations\13.0\919f0dfe192fb4e063e7dacadee7f8bb9a2672a9\annotations-13.0.jar -Launcher Type: SUN_STANDARD - -[Global flags] - intx CICompilerCount = 4 {product} {ergonomic} - uint ConcGCThreads = 2 {product} {ergonomic} - bool EagerJVMCI = true {JVMCI product} {ergonomic} - bool EnableJVMCI = true {JVMCI product} {jimage} - bool EnableJVMCIProduct = true {JVMCI product} {jimage} - uint G1ConcRefinementThreads = 8 {product} {ergonomic} - size_t G1HeapRegionSize = 2097152 {product} {ergonomic} - size_t InitialHeapSize = 197132288 {product} {ergonomic} - size_t MarkStackSize = 4194304 {product} {ergonomic} - size_t MarkStackSizeMax = 536870912 {product} {ergonomic} - size_t MaxHeapSize = 3154116608 {product} {ergonomic} - size_t MaxNewSize = 1891631104 {product} {ergonomic} - size_t MinHeapDeltaBytes = 2097152 {product} {ergonomic} - size_t MinHeapSize = 8388608 {product} {ergonomic} - uintx NonNMethodCodeHeapSize = 6356992 {pd product} {ergonomic} - uintx NonProfiledCodeHeapSize = 122683392 {pd product} {ergonomic} - uintx ProfiledCodeHeapSize = 122617856 {pd product} {ergonomic} - uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic} - bool SegmentedCodeCache = true {product} {ergonomic} - size_t SoftMaxHeapSize = 3154116608 {manageable} {ergonomic} - int ThreadPriorityPolicy = 1 {product} {jimage} - bool UseCompressedOops = true {product lp64_product} {ergonomic} - bool UseG1GC = true {product} {ergonomic} - bool UseLargePagesIndividualAllocation = false {pd product} {ergonomic} - -Logging: -Log output configuration: - #0: stdout all=warning uptime,level,tags foldmultilines=false - #1: stderr all=off uptime,level,tags foldmultilines=false - -Release file: -IMPLEMENTOR="Oracle Corporation" -JAVA_RUNTIME_VERSION="25+37-LTS-jvmci-b01" -JAVA_VERSION="25" -JAVA_VERSION_DATE="2025-09-16" -LIBC="default" -MODULES="java.base java.logging java.management jdk.internal.vm.ci org.graalvm.collections jdk.management jdk.unsupported org.graalvm.truffle.compiler org.graalvm.word jdk.graal.compiler com.oracle.graal.graal_enterprise org.graalvm.nativeimage com.oracle.svm.enterprise.truffle java.compiler java.datatransfer java.xml java.prefs java.desktop java.instrument java.security.sasl java.naming java.rmi java.management.rmi java.net.http java.scripting java.security.jgss java.transaction.xa java.sql java.sql.rowset java.xml.crypto java.se java.smartcardio jdk.accessibility jdk.internal.jvmstat jdk.attach jdk.charsets jdk.internal.opt jdk.zipfs jdk.compiler jdk.crypto.cryptoki jdk.crypto.ec jdk.crypto.mscapi jdk.dynalink jdk.internal.ed jdk.editpad jdk.graal.compiler.management jdk.hotspot.agent jdk.httpserver jdk.incubator.vector jdk.internal.le jdk.internal.md jdk.jartool jdk.javadoc jdk.jcmd jdk.management.agent jdk.jconsole jdk.jdeps jdk.jdwp.agent jdk.jdi jdk.jfr jdk.jlink jdk.jpackage jdk.jshell jdk.jsobject jdk.jstatd jdk.localedata jdk.management.jfr jdk.naming.dns jdk.naming.rmi jdk.net jdk.nio.mapmode jdk.sctp jdk.security.auth jdk.security.jgss jdk.unsupported.desktop jdk.xml.dom org.graalvm.nativeimage.libgraal org.graalvm.nativeimage.llvm org.graalvm.webimage.api" -OS_ARCH="x86_64" -OS_NAME="Windows" -SOURCE=".:git:e50a3609700e open:git:6dc8bf37a45e labsjdk-builder:5742fd480d0e3323ee14d199f6d3e3fcbeef04c1 compiler:082f26e36e8b0740f9d4805ad97087a707de25d9 espresso-shared:082f26e36e8b0740f9d4805ad97087a707de25d9 graal-enterprise:84cf997fd60f97a0ad6ce5c3b55d88f56d78f98d lium:84cf997fd60f97a0ad6ce5c3b55d88f56d78f98d regex:082f26e36e8b0740f9d4805ad97087a707de25d9 reporter:84cf997fd60f97a0ad6ce5c3b55d88f56d78f98d sdk:082f26e36e8b0740f9d4805ad97087a707de25d9 substratevm:082f26e36e8b0740f9d4805ad97087a707de25d9 substratevm-en -Environment Variables: -JAVA_HOME=C:\Users\Hal\.jdks\graalvm-jdk-25 -PATH=C:\VulkanSDK\1.4.335.0\Bin;C:\Users\Hal\OneDrive\Terrain4GameEngine\Terrain4JEngine\VulkanSDK\Bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Microsoft SQL Server\150\Tools\Binn\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\;C:\Program Files\dotnet\;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files\Git\cmd;C:\Program Files\PuTTY\;C:\Program Files\Mullvad VPN\resources;C:\Program Files\Cloudflare\Cloudflare WARP\;C:\Users\Hal\AppData\Local\Microsoft\WindowsApps;C:\Users\Hal\AppData\Local\JetBrains\Toolbox\scripts;C:\Users\Hal\.dotnet\tools -USERNAME=Hal -OS=Windows_NT -PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 126 Stepping 5, GenuineIntel -TMP=C:\Users\Hal\AppData\Local\Temp -TEMP=C:\Users\Hal\AppData\Local\Temp - - - - -Compilation memory statistics disabled. - -Periodic native trim disabled - ---------------- S Y S T E M --------------- - -OS: - Windows 10 , 64 bit Build 19041 (10.0.19041.7291) -OS uptime: 0 days 5:55 hours - -CPU: total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 126 stepping 5 microcode 0xa6, cx8, cmov, fxsr, ht, mmx, 3dnowpref, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, lzcnt, tsc, tscinvbit, avx, avx2, aes, erms, clmul, bmi1, bmi2, adx, avx512f, avx512dq, avx512cd, avx512bw, avx512vl, sha, fma, vzeroupper, avx512_vpopcntdq, avx512_vpclmulqdq, avx512_vaes, avx512_vnni, clflush, clflushopt, avx512_vbmi2, avx512_vbmi, rdtscp, rdpid, fsrm, gfni, avx512_bitalg, f16c, pku, avx512_ifma -Processor Information for the first 8 processors : - Max Mhz: 1190, Current Mhz: 991, Mhz Limit: 987 - -Memory: 4k page, system-wide physical 12026M (1821M free) -TotalPageFile size 20505M (AvailPageFile size 3653M) -current process WorkingSet (physical memory assigned to process): 1445M, peak: 1941M -current process commit charge ("private bytes"): 1575M, peak: 2074M - -vm_info: Java HotSpot(TM) 64-Bit Server VM (25+37-LTS-jvmci-b01) for windows-amd64 JRE (25+37-LTS-jvmci-b01), built on 2025-09-01T11:22:54Z with unknown MS VC++:1943 - -END. diff --git a/resources/EngineResources/GLShaders/scene_frag.glsl b/resources/EngineResources/GLShaders/scene_frag.glsl new file mode 100644 index 0000000..e2430b6 --- /dev/null +++ b/resources/EngineResources/GLShaders/scene_frag.glsl @@ -0,0 +1,9 @@ +#version 330 + +in vec3 outColour; +out vec4 fragColor; + +void main() +{ + fragColor = vec4(outColour, 1.0); +} \ No newline at end of file diff --git a/resources/EngineResources/GLShaders/scene_vert.glsl b/resources/EngineResources/GLShaders/scene_vert.glsl new file mode 100644 index 0000000..c2886ea --- /dev/null +++ b/resources/EngineResources/GLShaders/scene_vert.glsl @@ -0,0 +1,12 @@ +#version 330 + +layout (location=0) in vec3 position; +layout (location=1) in vec3 colour; + +out vec3 outColour; + +void main() +{ + gl_Position = vec4(position, 1.0); + outColour = colour; +} \ No newline at end of file diff --git a/resources/EngineResources/SpriteShaders/sprite_fragment.glsl b/resources/EngineResources/SpriteShaders/sprite_fragment.glsl index 0b05827..ea509ee 100644 --- a/resources/EngineResources/SpriteShaders/sprite_fragment.glsl +++ b/resources/EngineResources/SpriteShaders/sprite_fragment.glsl @@ -6,7 +6,7 @@ layout(location = 0) in vec2 inUV; layout(location = 0) out vec4 outColor; layout(push_constant) uniform pc { - layout(offset = 24) uint textureIndex; + layout(offset = 28) uint textureIndex; } push_constants; layout(set = 1, binding = 0) uniform sampler2D spriteTextures[MAX_TEXTURES]; diff --git a/resources/EngineResources/SpriteShaders/sprite_translucent_fragment.glsl b/resources/EngineResources/SpriteShaders/sprite_translucent_fragment.glsl index e6505ca..d05d138 100644 --- a/resources/EngineResources/SpriteShaders/sprite_translucent_fragment.glsl +++ b/resources/EngineResources/SpriteShaders/sprite_translucent_fragment.glsl @@ -6,7 +6,7 @@ layout(location = 0) in vec2 inUV; layout(location = 0) out vec4 outColor; layout(push_constant) uniform pc { - layout(offset = 24) uint textureIndex; + layout(offset = 28) uint textureIndex; } push_constants; layout(set = 1, binding = 0) uniform sampler2D spriteTextures[MAX_TEXTURES]; diff --git a/resources/EngineResources/SpriteShaders/sprite_vertex.glsl b/resources/EngineResources/SpriteShaders/sprite_vertex.glsl index 28e01c3..d5682cb 100644 --- a/resources/EngineResources/SpriteShaders/sprite_vertex.glsl +++ b/resources/EngineResources/SpriteShaders/sprite_vertex.glsl @@ -10,7 +10,7 @@ layout(push_constant) uniform pc { vec2 modelSize; vec2 position; vec2 screenSize; - + float zAmount; } push_constants; layout(set = 0, binding = 0) uniform ViewUniform{ @@ -22,7 +22,7 @@ layout(set = 0, binding = 0) uniform ViewUniform{ void main() { vec2 ScaledPos = inPos * push_constants.modelSize; vec2 worldPos = push_constants.position + ScaledPos; - worldPos += viewUniform.camPos; + worldPos += (viewUniform.camPos * push_constants.zAmount); vec2 ndc = vec2( (worldPos.x / push_constants.screenSize.x) * 2.0 - 1.0, (worldPos.y / push_constants.screenSize.y) * 2.0 - 1.0 diff --git a/src/main/java/net/halbear/Executable/Init.java b/src/main/java/net/halbear/Executable/Init.java index 5dac465..1644579 100644 --- a/src/main/java/net/halbear/Executable/Init.java +++ b/src/main/java/net/halbear/Executable/Init.java @@ -10,8 +10,7 @@ import java.util.UUID; //Halbear was here public class Init { - public static void main(String[] args){ - Configuration.set("writer.file", "ClientLog" + UUID.randomUUID() +".t4jlog"); + public static void StartClient(){ Logger.info("\nLaunching New Terrain4J Powered Software!"); var GameEngine = new PrimaryRuntime(EngineConfig.getInstance().GetSoftwareName(), new GameCore()); Logger.info("Launched Terrain4J Engine"); diff --git a/src/main/java/net/halbear/Executable/Launcher.java b/src/main/java/net/halbear/Executable/Launcher.java new file mode 100644 index 0000000..31414b1 --- /dev/null +++ b/src/main/java/net/halbear/Executable/Launcher.java @@ -0,0 +1,49 @@ +package net.halbear.Executable; + +import com.beust.jcommander.JCommander; +import com.beust.jcommander.Parameter; +import com.beust.jcommander.ParameterException; +import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; +import net.halbear.Terrain4J.EngineCore.Logic.Rendering.ModelCompiler; +import org.tinylog.Logger; +import org.tinylog.configuration.Configuration; + +import java.io.IOException; +import java.util.UUID; + +public class Launcher { + + @Parameter(names = "-server", description = "is this a server") + private boolean Server = false; + public static void main(String[] args){ + var Main = new Launcher(); + var jCommander = JCommander.newBuilder().addObject(Main).build(); + try{ + jCommander.parse(args); + Main.Launch(args); + } catch(ParameterException exception){ + jCommander.usage(); + } catch(IOException exception){ + System.out.println("Error Starting Game:" + exception); + } + } + + private static void Launch(Boolean server, String[] args){ + if(server){ + try { + net.halbear.Executable.Server.StartServer(args); + } catch (IOException exception){ + System.out.println("Error Starting Server:" + exception); + } + } else{ + Init.StartClient(); + } + } + + + private void Launch(String[] args) throws IOException{ + if(Server) Configuration.set("writer.file", "ServerLog.t4jlog"); + else Configuration.set("writer.file", "ClientLog" + UUID.randomUUID() +".t4jlog"); + Launch(EngineConfig.getInstance().GetServer(),args); + } +} diff --git a/src/main/java/net/halbear/Executable/Server.java b/src/main/java/net/halbear/Executable/Server.java index 5d45b89..189d986 100644 --- a/src/main/java/net/halbear/Executable/Server.java +++ b/src/main/java/net/halbear/Executable/Server.java @@ -3,11 +3,15 @@ package net.halbear.Executable; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Main.GameCore; import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; +import net.halbear.Terrain4J.EngineCore.ServerNetworking.ClientSession; import net.halbear.Terrain4J.EngineCore.ServerNetworking.Packet; +import net.halbear.Terrain4J.EngineCore.ServerNetworking.ServerSideNetworkUtils; +import net.halbear.Terrain4J.EngineCore.Threads.EngineThread; import net.halbear.Terrain4J.EngineCore.Threads.RenderThread; import net.halbear.Terrain4J.EngineCore.Threads.ServerConnectionThread; +import net.halbear.Terrain4J.EngineCore.Threads.ServerSelectorMasterThread; +import org.jetbrains.annotations.NotNull; import org.tinylog.Logger; -import org.tinylog.configuration.Configuration; import java.io.IOException; import java.net.ServerSocket; @@ -15,14 +19,31 @@ import java.net.Socket; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.atomic.AtomicReference; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class Server { public static Map ConnectedClients = new ConcurrentHashMap<>(); + public static Map ClientNames = new ConcurrentHashMap<>(); + + private static ServerSelectorMasterThread ServerNetworker; + + public static ServerSelectorMasterThread GetServerNetworker(){ + return ServerNetworker; + } public static final Queue OutGoingPacketQueue = new ConcurrentLinkedQueue<>(); public static final Queue IncomingPacketQueue = new ConcurrentLinkedQueue<>(); public static void CollectIncomingPackets(){ + ClientSession.GetClientSessionInstances().forEach((uuid, client)->{ + client.CollectIncomingPackets(IncomingPacketQueue); + }); + } + + @Deprecated + public static void LegacyCollectIncomingPackets(){ ConnectedClients.forEach((uuid,client)->{ client.CollectIncomingPackets(IncomingPacketQueue); }); @@ -31,11 +52,24 @@ public class Server { public static void ProcessIncomingPackets(){ Packet packet; while((packet = IncomingPacketQueue.poll()) != null){ - ServerConnectionThread.ProcessClientPacket(packet); + ServerSideNetworkUtils.ProcessClientPacket(packet); } } public static void ProcessOutgoingPackets(){ + + } + + @Deprecated + public static void LegacyProcessIncomingPackets(){ + Packet packet; + while((packet = IncomingPacketQueue.poll()) != null){ + ServerSideNetworkUtils.LegacyProcessClientPacket(packet); + } + } + + @Deprecated + public static void LegacyProcessOutgoingPackets(){ Packet packet; while((packet = OutGoingPacketQueue.poll()) != null){ Packet packetToSend = packet; @@ -46,37 +80,172 @@ public class Server { } } - public static void RemoveClient(UUID clientID){ + @Deprecated + public static void LegacyRemoveClient(UUID clientID){ + Logger.debug("Removing client with UUID {}",clientID); ServerConnectionThread connection = ConnectedClients.remove(clientID); if(connection != null){ connection.DestroyOwnedActor(); } } - public static void main(String[] args) throws IOException { - Configuration.set("writer.file", "ServerLog.t4jlog"); + static boolean LegacyNetworking = false; + + public static void StartServer(String[] args) throws IOException { + ServerSocket server = new ServerSocket(ServerConnectionThread.ServerPort); Logger.info("\nLaunching New Terrain4J Powered Software!"); RenderThread.Headless = true; - PrimaryRuntime.Server = true; + PrimaryRuntime.IsServer = true; - Thread acceptThread = new Thread(() -> { - while(true) { - try { - Socket clientSocket = server.accept(); - new Thread(new ServerConnectionThread(clientSocket)).start(); - } catch (IOException e) { - Logger.error(e, "Failed to accept client connection"); + if(LegacyNetworking){ + Thread acceptThread = new Thread(() -> { + while(true) { + try { + Socket clientSocket = server.accept(); + new Thread(new ServerConnectionThread(clientSocket)).start(); + } catch (IOException e) { + Logger.error(e, "Failed to accept client connection"); + } } - } - }, "Terrain4J Server Accept Thread"); - - acceptThread.start(); + }, "Terrain4J Server Connection Listener Thread"); + acceptThread.start(); + } + else { + ServerNetworker = new ServerSelectorMasterThread(); + ServerNetworker.Initialise(); + } var GameEngine = new PrimaryRuntime(EngineConfig.getInstance().GetSoftwareName(), new GameCore()); Logger.info("Launched Terrain4J Engine"); GameEngine.run(); } + + private static final Map ProfanityFilter = new HashMap<>(); + private static final Map LEET_MAP = new HashMap<>(); + private static final Pattern TextFilterPattern; + + static{ + ProfanityFilter.put("fuck", true); + ProfanityFilter.put("shit", true); + ProfanityFilter.put("bitch", true); + ProfanityFilter.put("motherfucker",true); + ProfanityFilter.put("nigger",true); + ProfanityFilter.put("nigga",true); + ProfanityFilter.put("pussy",true); + ProfanityFilter.put("cunt",true); + ProfanityFilter.put("slut",true); + ProfanityFilter.put("whore",true); + + LEET_MAP.put("(3", "ce"); + LEET_MAP.put("(", "c"); + LEET_MAP.put("|)", "d"); + LEET_MAP.put("|", "i"); + LEET_MAP.put("!", "i"); + LEET_MAP.put("3", "e"); + LEET_MAP.put("£", "e"); + LEET_MAP.put("1", "l"); + LEET_MAP.put("0", "o"); + LEET_MAP.put("[]", "o"); + LEET_MAP.put("{}", "o"); + LEET_MAP.put("*", "o"); + LEET_MAP.put("4", "a"); + LEET_MAP.put("@", "a"); + LEET_MAP.put("5", "s"); + LEET_MAP.put("$", "s"); + LEET_MAP.put("7", "t"); + + StringBuilder patternBuilder = new StringBuilder(); + LEET_MAP.keySet().stream() + .sorted((a, b) -> Integer.compare(b.length(), a.length())) + .forEach(key -> patternBuilder.append(Pattern.quote(key)).append("|")); + + String regex = patternBuilder.substring(0, patternBuilder.length() - 1); + TextFilterPattern = Pattern.compile(regex); + } + + public static String ProcessStringFiltering(String TextIn){ + Logger.debug("Incoming String: " + TextIn); + String AutoFileredTextIn = TextIn; //TextIn.replaceAll("[^\\dA-Za-z ]", "#"); + String Lower = TextIn.toLowerCase(); + + Matcher matcher = TextFilterPattern.matcher(Lower); + + StringBuilder result = new StringBuilder(); + + while (matcher.find()) { + String token = matcher.group(); + String replacement = LEET_MAP.get(token); + matcher.appendReplacement(result, Matcher.quoteReplacement(replacement)); + } + matcher.appendTail(result); + + return getConstructedText(result, AutoFileredTextIn); + } + + @NotNull + private static String getConstructedText(StringBuilder result, String AutoFileredTextIn) { + String translated = result.toString(); + Logger.debug("regex checked String: " + translated); + String[] words = translated.split("\\s+"); + String[] OriginalWords = AutoFileredTextIn.split("\\s+"); + + String ConstructedText = ""; + boolean ContainsProfanity = false; + for (int i = 0; i < words.length; i++) { + String word = words[i]; + if(ProfanityFilter.containsKey(words[i])){ + ConstructedText += "[Censored] "; + ContainsProfanity = true; + } else{ + ConstructedText += (words.length == OriginalWords.length ? OriginalWords[i] : word) + " "; + } + } + return ConstructedText; + } + + public static void ProcessCommand(String TextIn){ + String formatted = TextIn.trim().toLowerCase().replace("\\s|[\\_\\-\\/\\\\]",""); + switch (formatted){ + case "help": + case "?": + case "helpme": + case "docs": + case "documentation": + PrimaryRuntime.printLog("Here are a list of commands!\n\t help -> list's all of the available commands\n\t stop -> stops the server with a clean shutdown\n\t quit -> forcibly kills the server\n\t stats -> server info dump\n"); + break; + case "stats": + List profiling = EngineConfig.getInstance().GetSystemProfiling(); + String Profiling = ""; + for(int i = 0; i < profiling.size(); i++){ + Profiling += String.join("\n", profiling.get(i)); + } + + AtomicReference PlayerConnections = new AtomicReference<>(""); + + Server.ConnectedClients.forEach((uuid, client)->{ + String Username = "N/A"; + if(Server.ClientNames.containsKey(uuid)){ + Username = Server.ClientNames.get(uuid); + } + PlayerConnections.set(PlayerConnections.get() + "\nConnection UUID: " + uuid.toString() + "\n\tIP address -> " + client.getIP() + "\n\tUsername -> " + Username); + }); + + PrimaryRuntime.printLog("\nServer Runtime Info:\n\tPlayers Connected: " + Server.ConnectedClients.size() +"\n" + PlayerConnections.get() + "\n\n" + Profiling); + break; + case "stop": + case "end": + PrimaryRuntime.printLog("Stopping Server"); + EngineThread.running = false; + PrimaryRuntime.CanClose = true; + break; + case "quit": + case "kill": + case "exit": + System.exit(0); + break; + } + } } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Display/GLFWImageParser.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Display/GLFWImageParser.java index 9e98d6c..eb570e6 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Display/GLFWImageParser.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Display/GLFWImageParser.java @@ -1,6 +1,7 @@ package net.halbear.Terrain4J.EngineCore.Display; import org.lwjgl.system.MemoryStack; +import org.tinylog.Logger; import java.nio.ByteBuffer; import java.nio.IntBuffer; @@ -28,7 +29,7 @@ public class GLFWImageParser { IntBuffer height = MemStack.mallocInt(1); image = stbi_load(path, width, height, channels, 4); if (image == null) { - System.out.println("Could not load or find image inputted."); + Logger.debug("Could not load or find image inputted."); } Width = width.get(); Height = height.get(); diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Display/OpenGLRenderer.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Display/OpenGLRenderer.java new file mode 100644 index 0000000..577180e --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Display/OpenGLRenderer.java @@ -0,0 +1,161 @@ +package net.halbear.Terrain4J.EngineCore.Display; + +import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; +import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; +import net.halbear.Terrain4J.EngineCore.Logic.InitData; +import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; +import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.OpenGL.GlModels.GLMesh; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.OpenGL.Rendering.ForwardRenderer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.OpenGL.Rendering.SceneRender; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.GUI.GuiRenderer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.TextureCache; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.MaterialData; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.MaterialsCache; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.ModelData; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.OpenGL.GlModels.ModelsCache; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.SceneRenderer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; +import org.lwjgl.opengl.GL; +import org.lwjgl.opengl.GLCapabilities; +import org.tinylog.Logger; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.lwjgl.glfw.GLFW.glfwMakeContextCurrent; +import static org.lwjgl.glfw.GLFW.glfwSwapBuffers; +import static org.lwjgl.opengl.GL11.*; + +public class OpenGLRenderer implements Renderer{ + private int CurrentFrame; + private boolean Resize = false; + private List Materials = new ArrayList<>(); + private List Models = new ArrayList<>(); + private final MaterialsCache materialsCache; + private TextureCache textureCache; + private EngineConfig.AntiAliasType CurrentAAMode; + private final ModelsCache modelsCache; + private final boolean Deferred; + private float LastGamma = 0.8545f; + private GLCapabilities glCapabilities = null; + private SceneRender sceneRenderer = null; + + public OpenGLRenderer(EngineInstance engineInstance) { + textureCache = new TextureCache(); + materialsCache = new MaterialsCache(); + modelsCache = new ModelsCache(); + Resize = false; + CurrentAAMode = EngineConfig.getInstance().RenderAAType(); + LastGamma = EngineConfig.getInstance().GetGamma(); + Deferred = EngineConfig.getInstance().DeferredRendering(); + } + public static boolean LoggedNullCapabilities = false; + @Override + public void render(EngineInstance engineInstance) { + if(!Initialised){ + glfwMakeContextCurrent(PrimaryRuntime.GetEngineInstance().window().getHandle()); + glCapabilities = GL.createCapabilities(); + glClearColor(0.0f, 0.0f, 0.1f, 0.0f); + if(!LoggedNullCapabilities){ + Logger.debug("Creating OpenGL Context On Render Thread"); + LoggedNullCapabilities = true; + } + sceneRenderer = new ForwardRenderer(); + Models.addAll(initData.Models()); + Models.forEach(model->{ + float Left = -0.9f * (float)Math.random(); + float right = Left + 0.1f + 0.25f * (float)Math.random(); + float bottom = -1.0f + 2 * (float)Math.random(); + float top = bottom + 0.1f + 0.25f * (float)Math.random(); + float middle = Left + (right - Left)/2; + float[] positions = new float[]{ + Left, top, 0.0f, + Left, bottom, 0.0f, + right, bottom, 0.0f, + right, top, 0.0f + }; + float[] colours = new float[]{ + 0.5f, 0.0f, 0.0f, + 0.0f, 0.5f, 0.0f, + 0.0f, 0.0f, 0.5f, + 0.0f, 0.5f, 0.5f, + }; + int[] indices = new int[]{ + 0, 1, 3, 3, 1, 2, + }; + GLMesh mesh = new GLMesh(positions, colours, indices); + modelsCache.addMesh(model.ID(),mesh); + }); + Initialised = true; + } + if(glCapabilities == null) { + glfwMakeContextCurrent(engineInstance.window().getHandle()); + glCapabilities = GL.createCapabilities(); + glClearColor(0.0f, 0.0f, 0.0f, 1.0f); + if(!LoggedNullCapabilities){ + Logger.debug("Creating OpenGL Context On Render Thread"); + LoggedNullCapabilities = true; + } + return; + } + + Window window = engineInstance.window(); + glViewport(0, 0, window.getWidth(), window.getHeight()); + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + sceneRenderer.Render(engineInstance.scene(), modelsCache); + + glfwSwapBuffers(engineInstance.window().getHandle()); + } + + public TextureCache GetTextureCache(){return textureCache;} + public MaterialsCache GetMaterialsCache(){return materialsCache;} + public VulkanContext GetVulkanContext(){return null;} + + public EngineConfig.AntiAliasType GetCurrentAAMode(){return CurrentAAMode;} + + public boolean GetDeferred(){return Deferred;} + + @Override + public SceneRenderer GetSceneRender() { + return null; + } + private boolean Initialised = false; + private InitData initData = null; + @Override + public void Initialise(InitData initData) { + Initialised = false; + this.initData = initData; + } + + @Override + public GuiRenderer GetGUIRenderer() { + return null; + } + + @Override + public long GetGuiTexture(long ID) { + return 0; + } + + public void cleanup() { + + } + + @Override + public void DeferredRender(EngineInstance engineInstance) { + + } + + @Override + public void ForwardRender(EngineInstance engineInstance) { + + } + + + +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Renderer.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Renderer.java new file mode 100644 index 0000000..dc6e72d --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Renderer.java @@ -0,0 +1,63 @@ +package net.halbear.Terrain4J.EngineCore.Display; + +import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; +import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; +import net.halbear.Terrain4J.EngineCore.Logic.InitData; +import net.halbear.Terrain4J.EngineCore.Logic.Rendering.SkyBox; +import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.GUI.GuiRenderer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.GUI.GuiTexture; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.DeferredRendering.LightRenderer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.TextureCache; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.PostProcessing.PostProcess; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.MaterialData; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.MaterialsCache; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.ModelData; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.ModelsCache; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.SpriteRendering.SpriteRenderer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandPool; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.GPUSynchronisation.Fence; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.GPUSynchronisation.Semaphore; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Queues.Queue; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.DeferredSceneRender; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.ForwardSceneRender; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.SceneRenderer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.SwapChain.SwapChain; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.SwapChain.SwapChainRender; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkCommandBufferSubmitInfo; +import org.lwjgl.vulkan.VkExtent2D; +import org.lwjgl.vulkan.VkSemaphoreSubmitInfo; +import org.tinylog.Logger; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.lwjgl.vulkan.VK13.*; + +public interface Renderer { + public TextureCache GetTextureCache(); + public MaterialsCache GetMaterialsCache(); + public VulkanContext GetVulkanContext(); + + public EngineConfig.AntiAliasType GetCurrentAAMode(); + public SceneRenderer GetSceneRender(); + + public boolean GetDeferred(); + + + public void Initialise(InitData initData); + + public GuiRenderer GetGUIRenderer(); + public long GetGuiTexture(long ID); + + public void cleanup() ; + public void DeferredRender(EngineInstance engineInstance); + + public void ForwardRender(EngineInstance engineInstance); + + public void render(EngineInstance engineInstance); +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Render.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Display/VulkanRenderer.java similarity index 88% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Display/Render.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/Display/VulkanRenderer.java index c04dcf4..42dee26 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Render.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Display/VulkanRenderer.java @@ -6,24 +6,25 @@ import net.halbear.Terrain4J.EngineCore.Logic.InitData; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.SkyBox; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; -import net.halbear.Terrain4J.EngineCore.Vulkan.GUI.GuiRenderer; -import net.halbear.Terrain4J.EngineCore.Vulkan.GUI.GuiTexture; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.DeferredRendering.LightRenderer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.TextureCache; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.PostProcessing.PostProcess; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.*; -import net.halbear.Terrain4J.EngineCore.Vulkan.SpriteRendering.SpriteRenderer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandPool; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.GPUSynchronisation.Fence; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.GPUSynchronisation.Semaphore; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Queues.Queue; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.DeferredSceneRender; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.ForwardSceneRender; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.SceneRenderer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.SwapChain.SwapChain; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.SwapChain.SwapChainRender; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.GUI.GuiRenderer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.GUI.GuiTexture; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.DeferredRendering.LightRenderer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.TextureCache; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.PostProcessing.PostProcess; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.*; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.SpriteRendering.SpriteRenderer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandPool; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.GPUSynchronisation.Fence; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.GPUSynchronisation.Semaphore; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Queues.Queue; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.DeferredSceneRender; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.ForwardSceneRender; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.SceneRenderer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.SwapChain.SwapChain; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.SwapChain.SwapChainRender; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.Threads.RenderThread; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkCommandBufferSubmitInfo; import org.lwjgl.vulkan.VkExtent2D; @@ -36,7 +37,7 @@ import java.util.List; import static org.lwjgl.vulkan.VK13.*; -public class Render { +public class VulkanRenderer implements Renderer { private final ModelsCache modelsCache; @@ -74,7 +75,7 @@ public class Render { public boolean GetDeferred(){return Deferred;} - public Render(EngineInstance engineInstance) { + public VulkanRenderer(EngineInstance engineInstance) { Deferred = EngineConfig.getInstance().DeferredRendering(); RendererContext = new VulkanContext(engineInstance.window()); CurrentFrame = 0; @@ -252,10 +253,10 @@ public class Render { } public void render(EngineInstance engineInstance){ + if(! RenderThread.AllowRender()) return; if(Deferred) DeferredRender(engineInstance); else ForwardRender(engineInstance); } - private void resize(EngineInstance engineInstance){ Window window = engineInstance.window(); if(window.getWidth() == 0 && window.getHeight() == 0){ diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Window.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Window.java index 9f8184b..9fd56f6 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Window.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Window.java @@ -4,20 +4,27 @@ import net.halbear.Terrain4J.EngineCore.Input.KeyboardInput; import net.halbear.Terrain4J.EngineCore.Input.MouseListener; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; +import org.joml.Vector2i; import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFWImage; import org.lwjgl.glfw.GLFWVidMode; import org.lwjgl.glfw.GLFWWindowFocusCallback; +import org.lwjgl.opengl.GL; +import org.lwjgl.opengl.GLCapabilities; +import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.tinylog.Logger; import java.io.File; +import java.nio.IntBuffer; import static net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs.StartMenu.GameStarted; import static net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs.StartMenu.ShowSettings; import static org.lwjgl.glfw.Callbacks.glfwFreeCallbacks; import static org.lwjgl.glfw.GLFW.*; import static org.lwjgl.glfw.GLFWVulkan.glfwVulkanSupported; +import static org.lwjgl.opengl.GL11.GL_TRUE; +import static org.lwjgl.opengl.GL11.glClearColor; public class Window { private final long handle; @@ -25,18 +32,85 @@ public class Window { private final MouseListener mouseInput; private int height; private int width; + private int x; + private int y; private boolean displayFPS = false; + private String Title = "Terrain4J Application"; + private final EngineConfig.RenderAPI LinkedApi; public boolean CursorLocked = false; public boolean ForceCursorUnlock = false; - public Window(String title){ + public String GetTitle(){return Title;} + public EngineConfig.RenderAPI GetLinkedApi(){return LinkedApi;} + public static Window RefreshRendererAttachment(Window windowIn){ + if(PrimaryRuntime.IsServer) return null; + Logger.debug("Creating new Window Instance"); + Vector2i inSize = windowIn.GetSize(); + Vector2i inPos = windowIn.GetPosition(); + String Title = windowIn.GetTitle(); + windowIn.cleanup(); + windowIn.setShouldClose(); + Window newWindow = new Window(Title); + newWindow.SetProperties(inSize.x, inSize.y, inPos.x, inPos.y); + return newWindow; + } + + public void SetProperties(int width, int height, int x, int y){ + this.width = width; + this.height = height; + this.x = x; + this.y = y; + glfwSetWindowSize(handle, width, height); + glfwSetWindowPos(handle, x, y); + } + + public Vector2i GetSize(){ + try (MemoryStack MemStack = MemoryStack.stackPush()) { + IntBuffer pWidth = MemStack.mallocInt(1); + IntBuffer pHeight = MemStack.mallocInt(1); + + GLFW.glfwGetWindowSize(handle, pWidth, pHeight); + + int width = pWidth.get(0); + int height = pHeight.get(0); + return new Vector2i(width, height); + } + } + + public Vector2i GetPosition(){ + try (MemoryStack MemStack = MemoryStack.stackPush()) { + IntBuffer pLeft = MemStack.mallocInt(1); + IntBuffer pRight = MemStack.mallocInt(1); + + GLFW.glfwGetWindowPos(handle, pLeft, pRight); + + int width = pLeft.get(0); + int height = pRight.get(0); + return new Vector2i(width, height); + } + } + + public Window(String title){ + this(title, EngineConfig.getInstance().GetRenderingAPI()); + } + public Window(String title, EngineConfig.RenderAPI api){ + if(PrimaryRuntime.IsServer) { + handle = 0; + LinkedApi = null; + keyboardInput = null; + mouseInput = null; + return; + } + this.Title = title; + this.LinkedApi = api; if (!glfwInit()) { throw new RuntimeException("Unable to initialize GLFW"); } - if (!glfwVulkanSupported()) { - throw new RuntimeException("Cannot find a compatible Vulkan installable client driver (ICD)"); + if (!glfwVulkanSupported() && EngineConfig.getInstance().GetRenderingAPI() == EngineConfig.RenderAPI.Vulkan) { + Logger.error("Cannot find a compatible Vulkan installable client driver (ICD)"); + EngineConfig.getInstance().SetRenderingAPI(EngineConfig.RenderAPI.OpenGL); } GLFWVidMode vidMode = glfwGetVideoMode(glfwGetPrimaryMonitor()); if (vidMode == null) { @@ -46,8 +120,25 @@ public class Window { height = vidMode.height();//Globals.getInstance().getHeight(); glfwDefaultWindowHints(); + switch (api){ + case Vulkan: + glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); + break; + case OpenGL: + default: + glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_API); + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); - glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); + if (EngineConfig.getInstance().CompatibilityMode()) { + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE); + } else { + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); + } + + break; + } glfwWindowHint(GLFW_MAXIMIZED, GLFW_FALSE); glfwWindowHint(GLFW_ALPHA_BITS, 0); glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_FALSE); @@ -66,6 +157,11 @@ public class Window { height = h; }); + glfwSetErrorCallback((int errorCode, long msgPtr) -> + Logger.error("Error code [{}], msg [{}]", errorCode, MemoryUtil.memUTF8(msgPtr)) + ); + + File IconLocation = new File("src/main/resources" + EngineConfig.getInstance().FetchIcon()); GLFWImage Icon = GLFWImage.malloc(); GLFWImage.Buffer IconBuffer = GLFWImage.malloc(1); @@ -99,7 +195,7 @@ public class Window { PrimaryRuntime.UpdateFrameAccuracy(); } }); - glfwMakeContextCurrent(handle); + if(LinkedApi == EngineConfig.RenderAPI.Vulkan)glfwMakeContextCurrent(handle); if (EngineConfig.VSYNC) glfwSwapInterval(1); else glfwSwapInterval(0); mouseInput = new MouseListener(handle); @@ -115,6 +211,7 @@ public class Window { } public void cleanup() { + if(PrimaryRuntime.IsServer) return; glfwFreeCallbacks(handle); glfwDestroyWindow(handle); glfwTerminate(); @@ -131,7 +228,12 @@ public class Window { public MouseListener getMouseInput(){ return mouseInput; } + public void pollOpenGLEvents(){ + if(PrimaryRuntime.IsServer) return; + if(LinkedApi != EngineConfig.RenderAPI.OpenGL) return; + } public void pollEvents() { + if(PrimaryRuntime.IsServer) return; if((!GameStarted || ShowSettings || ForceCursorUnlock) && CursorLocked) UnlockCursor(); else if (GameStarted && !ShowSettings && !CursorLocked) LockCursor(); if (keyboardInput.keySinglePress(GLFW_KEY_V)) { @@ -153,6 +255,7 @@ public class Window { if (displayFPS) glfwSetWindowTitle(handle, EngineConfig.SOFTWARE_TITLE + " - FPS: " + EngineConfig.FrameRate_PRIMARYTHREAD + " TPS: " + EngineConfig.TPS + " RenderFPS: " + EngineConfig.FrameRate_RENDERTHREAD + " VSYNC: " + EngineConfig.VSYNC); } public void SetVsync(){ + if(PrimaryRuntime.IsServer) return; Logger.info("Vsync Swap"); if (EngineConfig.VSYNC) { glfwSwapInterval(0); @@ -163,11 +266,15 @@ public class Window { EngineConfig.VSYNC = true; } } - public void setShouldClose() { + public void setShouldClose() + { + if(PrimaryRuntime.IsServer) return; + glfwSetWindowShouldClose(handle, true); } public boolean shouldClose() { //return false; + if(PrimaryRuntime.IsServer) return true; return glfwWindowShouldClose(handle); } } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Input/KeyboardInput.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Input/KeyboardInput.java index ef7dc08..7475c23 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Input/KeyboardInput.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Input/KeyboardInput.java @@ -1,5 +1,9 @@ package net.halbear.Terrain4J.EngineCore.Input; +import imgui.ImGui; +import imgui.ImGuiIO; +import imgui.flag.ImGuiKey; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.GUI.GuiUtils; import org.lwjgl.glfw.GLFWCharCallbackI; import org.lwjgl.glfw.GLFWKeyCallbackI; @@ -28,6 +32,12 @@ public class KeyboardInput implements GLFWKeyCallbackI { glfwPollEvents(); } public void KeyCallback(long Window, int key, int scancode, int action, int mods){ + + ImGui.getIO().addKeyEvent(ImGuiKey.Backspace, key == (GLFW_KEY_BACKSPACE) && (action == GLFW_PRESS || action == GLFW_REPEAT)); + ImGui.getIO().addKeyEvent(ImGuiKey.Delete, key == (GLFW_KEY_DELETE) && (action == GLFW_PRESS || action == GLFW_REPEAT)); + ImGui.getIO().addKeyEvent(ImGuiKey.LeftArrow, key == (GLFW_KEY_LEFT) && (action == GLFW_PRESS || action == GLFW_REPEAT)); + ImGui.getIO().addKeyEvent(ImGuiKey.RightArrow, key == (GLFW_KEY_RIGHT) && (action == GLFW_PRESS || action == GLFW_REPEAT)); + if (!keysPressed.contains(key) && action == GLFW_PRESS){ keysPressed.add(key); } else if (keysPressed.contains(key) && action == GLFW_RELEASE){ diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/EngineConfig.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/EngineConfig.java index 3457de6..85f064d 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/EngineConfig.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/EngineConfig.java @@ -1,8 +1,12 @@ package net.halbear.Terrain4J.EngineCore.Logic; import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.DeferredSceneRender; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.ForwardSceneRender; +import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs.SettingsMenu; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.DeferredSceneRender; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.ForwardSceneRender; +import net.halbear.Terrain4J.EngineCore.ServerNetworking.ClientSideNetworkUtils; +import net.halbear.Terrain4J.EngineCore.Threads.ClientConnectionThread; +import net.halbear.Terrain4J.EngineCore.Threads.RenderThread; import org.tinylog.Logger; import java.io.*; @@ -80,6 +84,12 @@ public class EngineConfig { public boolean RenderCollisionMesh = true; public float PhysicsSpeed = 1.0f; + public String UserDisplayName = "player"; + public String ServerIPAddress = "localhost"; + public int ServerPort = 25565; + + public RenderAPI RenderingAPI = RenderAPI.Vulkan; + public float MusicVolume = 0.0f; public float SoundVolume = 0.0f; public float WeaponVolume = 0.0f; @@ -87,6 +97,56 @@ public class EngineConfig { public float PlayerOnline = 1.0f; + public boolean IsServer = false; + + public boolean GetServer(){return IsServer;} + + public void SetServer(boolean NewServer) {IsServer = NewServer;} + + public String GetUserDisplayName(){return UserDisplayName;} + public void SetUserDisplayName(String NewName) { + UserDisplayName = NewName; + EngineConfigVar.setProperty("user_display_name",UserDisplayName); + try { + EngineConfigVar.store(new FileWriter(path.toAbsolutePath().toString() + "/" + FILENAME), "created new properties file"); + } catch (IOException e) { + Logger.error("Failed to write to config file: [{}]", e.getMessage()); + } + } + + public int GetServerPort(){return ServerPort;} + public void SetServerPort(int NewPort) { + ServerPort = NewPort; + EngineConfigVar.setProperty("server_port", String.valueOf(ServerPort)); + try { + EngineConfigVar.store(new FileWriter(path.toAbsolutePath().toString() + "/" + FILENAME), "created new properties file"); + } catch (IOException e) { + Logger.error("Failed to write to config file: [{}]", e.getMessage()); + } + } + + public String GetServerIP(){return ServerIPAddress;} + public void SetServerIP(String NewIP) { + ServerIPAddress = NewIP; + EngineConfigVar.setProperty("server_ip",ServerIPAddress); + try { + EngineConfigVar.store(new FileWriter(path.toAbsolutePath().toString() + "/" + FILENAME), "created new properties file"); + } catch (IOException e) { + Logger.error("Failed to write to config file: [{}]", e.getMessage()); + } + } + + public enum RenderAPI{ + Vulkan, + OpenGL + } + + public RenderAPI GetRenderingAPI(){return RenderingAPI;} + public synchronized void SetRenderingAPI(RenderAPI API){ + RenderingAPI = API; + Logger.debug("Rendering API changed to: " + API); + } + public float PhysicsSpeed(){return PhysicsSpeed;} public void SetPhysicsSpeed(float NewSpeed){PhysicsSpeed =NewSpeed;} @@ -166,6 +226,17 @@ public class EngineConfig { MSAAx8 } + public RenderAPI GetRenderAPI(String strIn){ + String formatted = strIn.toLowerCase().replace("\\s|[\\_\\-\\/\\\\]",""); + switch (formatted){ + case "vulkan": + return RenderAPI.Vulkan; + case "opengl": + default: + return RenderAPI.OpenGL; + } + } + public int GetRenderSampleCount(){ switch(AAMode){ case MSAAx2: @@ -183,9 +254,12 @@ public class EngineConfig { } } + private Properties EngineConfigVar; + private Path path; + private EngineConfig() { - var EngineConfigVar = new Properties(); - Path path = Paths.get(""); + EngineConfigVar = new Properties(); + path = Paths.get(""); File ConfigFile = new File(path.toAbsolutePath().toString() + "/" + FILENAME); boolean SuccessfulLoad = false; try(InputStream stream = new FileInputStream(path.toAbsolutePath().toString() + "/" + FILENAME)){ @@ -223,6 +297,8 @@ public class EngineConfig { IconName = (EngineConfigVar.getOrDefault("Software_Icon", "ProgramIcon.png").toString()); LoadingScreenLocation = (EngineConfigVar.getOrDefault("LoadingScreenLocation", LoadingScreenLocation).toString()); IconPath = (EngineConfigVar.getOrDefault("Software_Icon_Path", "/WindowResources/Icon/").toString()); + UserDisplayName = (EngineConfigVar.getOrDefault("user_display_name", "player").toString()); + ServerIPAddress = (EngineConfigVar.getOrDefault("server_ip", "localhost").toString()); CapMainToTickRate = Boolean.parseBoolean(EngineConfigVar.getOrDefault("cap_main_to_tickrate", true).toString()); CapFastToTickRate = Boolean.parseBoolean(EngineConfigVar.getOrDefault("cap_fast_to_tickrate", true).toString()); CapPrimaryToTickRate = Boolean.parseBoolean(EngineConfigVar.getOrDefault("cap_master_to_tickrate", false).toString()); @@ -239,6 +315,7 @@ public class EngineConfig { MaxDescriptors = Integer.parseInt(EngineConfigVar.getOrDefault("MaxDescriptors", "1000").toString()); VSYNC = Boolean.parseBoolean(EngineConfigVar.getOrDefault("vsync", true).toString()); vkValidated = Boolean.parseBoolean(EngineConfigVar.getOrDefault("vkValidated", false).toString()); + IsServer = Boolean.parseBoolean(EngineConfigVar.getOrDefault("server", false).toString()); RequestedImages = Integer.parseInt(EngineConfigVar.getOrDefault("RequestedImages", 3).toString()); ShaderDebug =Boolean.parseBoolean(EngineConfigVar.getOrDefault("Debug_Shaders", false).toString()); RecompileShaders =Boolean.parseBoolean(EngineConfigVar.getOrDefault("ShaderRecompiling", true).toString()); @@ -249,8 +326,12 @@ public class EngineConfig { renderer = Integer.parseInt(EngineConfigVar.getOrDefault("Renderer", 1).toString()) == 0 ? Renderer.Forward: Renderer.Deferred; ShadowMapSize = Integer.parseInt(EngineConfigVar.getOrDefault("ShadowMapSize", 16).toString()); MaxVulkanCrashesAllowed = Integer.parseInt(EngineConfigVar.getOrDefault("MaxAllowedVulkanCrashes", 10).toString()); + ServerPort = Integer.parseInt(EngineConfigVar.getOrDefault("server_port", 25565).toString()); CompatibilityMode = Boolean.parseBoolean(EngineConfigVar.getOrDefault("compatibility_mode", false).toString()); AlphaToCoverage = Boolean.parseBoolean(EngineConfigVar.getOrDefault("AlphaToCoverage", false).toString()); + RenderingAPI = GetRenderAPI(EngineConfigVar.getOrDefault("RenderingAPI", "VULKAN").toString()); + ClientSideNetworkUtils.ServerPort = ServerPort; + ClientSideNetworkUtils.ServerIP = ServerIPAddress; ForwardSceneRender.SetDualPassRendering(Boolean.parseBoolean(EngineConfigVar.getOrDefault("DualPassRendering", true).toString())); DeferredSceneRender.SetDualPassRendering(Boolean.parseBoolean(EngineConfigVar.getOrDefault("DualPassRendering", true).toString())); switch(AAValue){ @@ -289,6 +370,9 @@ public class EngineConfig { EngineConfigVar.setProperty("master_tick_rate", String.valueOf(DEFAULT_TICKRATE)); EngineConfigVar.setProperty("display_width","1280"); EngineConfigVar.setProperty("display_height","720"); + EngineConfigVar.setProperty("user_display_name","player"); + EngineConfigVar.setProperty("server_ip","localhost"); + EngineConfigVar.setProperty("server_port","25565"); EngineConfigVar.setProperty("vsync","true"); EngineConfigVar.setProperty("vkValidated","false"); EngineConfigVar.setProperty("Debug_Shaders","false"); @@ -298,9 +382,11 @@ public class EngineConfig { EngineConfigVar.setProperty("field_of_view","60"); EngineConfigVar.setProperty("z_near_plane","1"); EngineConfigVar.setProperty("z_far_plane","100"); + EngineConfigVar.setProperty("RenderingAPI","VULKAN"); EngineConfigVar.setProperty("DefaultTexturePath",DefaultTexturePath); EngineConfigVar.setProperty("MaxDescriptors","1000"); EngineConfigVar.setProperty("anti_alias_mode","1"); + EngineConfigVar.setProperty("server","false"); EngineConfigVar.setProperty("LoadingScreenLocation",LoadingScreenLocation); EngineConfigVar.store(new FileWriter(path.toAbsolutePath().toString() + "/" + FILENAME), "created new properties file"); Logger.debug("Wrote New Config File [{}]", ConfigFile.getAbsolutePath()); @@ -313,7 +399,6 @@ public class EngineConfig { } - public static synchronized EngineConfig getInstance() { if (instance == null) {instance = new EngineConfig();} return instance; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/EngineInstance.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/EngineInstance.java index dc248ea..699a1f8 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/EngineInstance.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/EngineInstance.java @@ -1,16 +1,16 @@ package net.halbear.Terrain4J.EngineCore.Logic; import net.halbear.Terrain4J.EngineCore.Audio.AudioManager; -import net.halbear.Terrain4J.EngineCore.Display.Render; import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; import net.halbear.Terrain4J.EngineCore.Main.Scene.IScene; -import net.halbear.Terrain4J.EngineCore.Main.Scene.Scene; import net.halbear.Terrain4J.EngineCore.Display.Window; -import net.halbear.Terrain4J.EngineCore.Threads.FastTickThread; -import net.halbear.Terrain4J.EngineCore.Threads.MainThread; -import net.halbear.Terrain4J.EngineCore.Threads.RenderThread; public record EngineInstance(Window window, IScene scene, PrimaryRuntime PrimaryThread, AudioManager audioManager) { + + public EngineInstance SetWindow(Window newWindow){ + return new EngineInstance(newWindow, scene, PrimaryThread, audioManager); + } + public void cleanup(){ window.cleanup(); audioManager.CleanUp(); diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/InitData.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/InitData.java index b95bb29..a3e52b2 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/InitData.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/InitData.java @@ -1,8 +1,8 @@ package net.halbear.Terrain4J.EngineCore.Logic; -import net.halbear.Terrain4J.EngineCore.Vulkan.GUI.GuiTexture; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.MaterialData; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.ModelData; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.GUI.GuiTexture; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.MaterialData; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.ModelData; import java.util.List; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/CollisionSensor.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/CollisionSensor.java deleted file mode 100644 index 8224289..0000000 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/CollisionSensor.java +++ /dev/null @@ -1,38 +0,0 @@ -package net.halbear.Terrain4J.EngineCore.Logic.Physics; - -import net.halbear.Terrain4J.EngineCore.Main.Scene.Actor; -import org.joml.Quaternionf; -import org.joml.Vector3f; - -public record CollisionSensor(Vector3f Offset, String ActorID) { - public Vector3f GetTransformedCollisionSensor() { - Actor actor = Actor.Actors.get(ActorID); - if (actor != null) { - CollisionSensor newSensor = new CollisionSensor(new Vector3f().set(Offset), ActorID); - Vector3f PivotOffset = new Vector3f().set(actor.GetPivotOffset()).add(actor.GetAditionalPivotOffset()); - return newSensor.TransformPosition(PivotOffset).TransformRotation(actor.GetRotation()).TransformPosition(PivotOffset.negate()).TransformScale(actor.GetScale()).TransformPosition(actor.GetPosition()).Offset; - } - return null; - } - public CollisionSensor TransformRotation(Quaternionf quaternionf){ - if(quaternionf == null ) return this; - Vector3f newV1 = new Vector3f(Offset); - newV1.rotate(quaternionf); - CollisionSensor newPoly = new CollisionSensor(newV1,ActorID); - return newPoly; - } - public CollisionSensor TransformScale(Vector3f Scale){ - if(Scale == null ) return this; - Vector3f newV1 = new Vector3f(Offset); - newV1.mul(Scale); - CollisionSensor newPoly = new CollisionSensor(newV1,ActorID); - return newPoly; - } - public CollisionSensor TransformPosition(Vector3f Position){ - if(Position == null ) return this; - Vector3f newV1 = new Vector3f(Offset); - newV1.add(Position); - CollisionSensor newPoly = new CollisionSensor(newV1,ActorID); - return newPoly; - } -} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/IPhysicsController.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/IPhysicsController.java index 790ed72..cfb59a2 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/IPhysicsController.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/IPhysicsController.java @@ -1,6 +1,5 @@ package net.halbear.Terrain4J.EngineCore.Logic.Physics; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyCollision.CollisionMesh; import org.joml.Vector2f; import org.joml.Vector3f; @@ -13,5 +12,4 @@ public interface IPhysicsController { public String MeshID(); public void PhysicsTick(float DeltaTime, float TargetFrameRate); public List Collisions(); - public void CollisionEvent(CollisionMesh collidingMesh, Vector3f PositionDifference, Vector2f CollisionScale); } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/LegacyCollision/CollisionIndexPoly.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/LegacyCollision/CollisionIndexPoly.java deleted file mode 100644 index f5f16c5..0000000 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/LegacyCollision/CollisionIndexPoly.java +++ /dev/null @@ -1,18 +0,0 @@ -package net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyCollision; - -import org.joml.Vector3f; - -public record CollisionIndexPoly(int Index1, int Index2, int Index3) { - public CollisionPoly GetCollisionPoly(CollisionMesh mesh){ - Vector3f[] vertices = mesh.GetTransformedVertices(new int[]{Index1,Index2,Index3}); - CollisionPoly polygon = new CollisionPoly(vertices[0],vertices[1],vertices[2],new Vector3f()); - polygon.CalculateCentre(); - return polygon; - } - public CollisionPoly GetRawCollisionPoly(CollisionMesh mesh){ - Vector3f[] vertices = mesh.GetUntransformedVertices(new int[]{Index1,Index2,Index3}); - CollisionPoly polygon = new CollisionPoly(vertices[0],vertices[1],vertices[2],new Vector3f()); - polygon.CalculateCentre(); - return polygon; - } -} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/LegacyCollision/CollisionManager.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/LegacyCollision/CollisionManager.java deleted file mode 100644 index e63eb7c..0000000 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/LegacyCollision/CollisionManager.java +++ /dev/null @@ -1,87 +0,0 @@ -package net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyCollision; - -import org.joml.Vector3f; -import org.joml.primitives.AABBf; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class CollisionManager { - public static Map CollisionMeshes = new HashMap<>(); - public static Map> CollisionChunks = new HashMap<>(); - public static List AlwaysCheckMeshes = new ArrayList<>(); - public static int ChunkWidth = 64; - - public static void AddNewMesh(CollisionMesh mesh){ - CollisionMeshes.put(mesh.ID, mesh); - AABBf Bounds = mesh.GetVoxelCollider(); - if(Bounds != null) { - Vector3f LowestPoints = new Vector3f(Bounds.minX, Bounds.minY, Bounds.minZ).div(ChunkWidth); - LowestPoints.x = (int) Math.floor(LowestPoints.x); - LowestPoints.y = (int) Math.floor(LowestPoints.y); - LowestPoints.z = (int) Math.floor(LowestPoints.z); - Vector3f LargestPoints = new Vector3f(Bounds.maxX, Bounds.maxY, Bounds.maxZ).div(ChunkWidth); - LargestPoints.x = (int) Math.ceil(LargestPoints.x); - LargestPoints.y = (int) Math.ceil(LargestPoints.y); - LargestPoints.z = (int) Math.ceil(LargestPoints.z); - for (int x = (int) LowestPoints.x; x < LargestPoints.x + 1; x++) { - for (int y = (int) LowestPoints.y; y < LargestPoints.y + 1; y++) { - for (int z = (int) LowestPoints.z; z < LargestPoints.z + 1; z++) { - String ChunkPosition = x + ":" + y + ":" + z; - if (!CollisionChunks.containsKey(ChunkPosition)) { - List newStrList = new ArrayList<>(); - CollisionChunks.put(ChunkPosition, newStrList); - } - CollisionChunks.get(ChunkPosition).add(mesh.ID); - } - } - } - } else{ - AlwaysCheckMeshes.add(mesh.ID); - } - } - - public static List GetCollisionMeshesAtChunk(String Chunk){ - return CollisionChunks.get(Chunk) == null ? new ArrayList<>() : CollisionChunks.get(Chunk); - } - - public static List GetAllCollisionMeshes(){return CollisionMeshes.values().stream().toList();} - - public static synchronized void UpdateCollisionChunks(){ - Map> newMap = new HashMap<>(); - List meshes = GetAllCollisionMeshes(); - List AlwaysShowMesh = new ArrayList<>(); - for(int i = 0; i < meshes.size(); i++){ - CollisionMesh mesh = meshes.get(i); - AABBf Bounds = mesh.GetVoxelCollider(); - if(Bounds != null) { - Vector3f LowestPoints = new Vector3f(Bounds.minX, Bounds.minY, Bounds.minZ).div(ChunkWidth); - LowestPoints.x = (int) Math.floor(LowestPoints.x); - LowestPoints.y = (int) Math.floor(LowestPoints.y); - LowestPoints.z = (int) Math.floor(LowestPoints.z); - Vector3f LargestPoints = new Vector3f(Bounds.maxX, Bounds.maxY, Bounds.maxZ).div(ChunkWidth); - LargestPoints.x = (int) Math.ceil(LargestPoints.x); - LargestPoints.y = (int) Math.ceil(LargestPoints.y); - LargestPoints.z = (int) Math.ceil(LargestPoints.z); - for (int x = (int) LowestPoints.x; x < LargestPoints.x + 1; x++) { - for (int y = (int) LowestPoints.y; y < LargestPoints.y + 1; y++) { - for (int z = (int) LowestPoints.z; z < LargestPoints.z + 1; z++) { - String ChunkPosition = x + ":" + y + ":" + z; - if (!CollisionChunks.containsKey(ChunkPosition)) { - List newStrList = new ArrayList<>(); - CollisionChunks.put(ChunkPosition, newStrList); - } - CollisionChunks.get(ChunkPosition).add(mesh.ID); - } - } - } - } else{ - AlwaysShowMesh.add(mesh.ID); - } - } - AlwaysCheckMeshes = (AlwaysShowMesh); - CollisionChunks = (newMap); - } -} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/LegacyCollision/CollisionMesh.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/LegacyCollision/CollisionMesh.java deleted file mode 100644 index 5c22867..0000000 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/LegacyCollision/CollisionMesh.java +++ /dev/null @@ -1,285 +0,0 @@ -package net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyCollision; - -import net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyPhysicsController; -import net.halbear.Terrain4J.EngineCore.Main.Scene.Actor; -import net.halbear.Terrain4J.EngineCore.Main.Util.Maths.T4Math; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.MeshData; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.ModelData; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; -import org.joml.Intersectionf; -import org.joml.Quaternionf; -import org.joml.Vector2f; -import org.joml.Vector3f; -import org.joml.primitives.AABBf; - -import java.io.*; -import java.util.*; - -public class CollisionMesh { - public final List Vertices; - public final List Polygons; - public final Map VertexLookup; - public Vector3f TopRightFront = new Vector3f(0,0,0); - public Vector3f BottomLeftBack = new Vector3f(0,0,0); - public Vector3f WorldPosition = new Vector3f(0,0,0); - public Quaternionf Rotation = new Quaternionf(); - public Vector3f Scale = new Vector3f(1f,1f,1f); - public final String ID; - public final String ParentID; - public AABBf Voxel; - - public List GetVertices(){return Vertices;} - - public CollisionMesh(String ID, String ActorID){ - this.ID = ID; - if(ActorID != "NULL") { - Scale = new Vector3f(Actor.Actors.get(ActorID).GetScale()); - Rotation = new Quaternionf(Actor.Actors.get(ActorID).GetRotation()); - } - ParentID = ActorID; - VertexLookup = new HashMap<>(); - Polygons = new ArrayList<>(); - Vertices = new ArrayList<>(); - } - - public void RegisterMesh(){ - CollisionManager.AddNewMesh(this); - } - - public AABBf GetVoxelCollider(){ - //if(TopRightFront == null || BottomLeftBack == null) return null; - //if(Voxel == null){ - Vector3f PivotOffset = Actor.Actors.get(ParentID) != null ? new Vector3f(Actor.Actors.get(ParentID).GetPivotOffset()).add(Actor.Actors.get(ParentID).GetAditionalPivotOffset()) : new Vector3f(0,0,0); - Vector3f TLF = new Vector3f(TopRightFront); - Vector3f BRB = new Vector3f(BottomLeftBack); - TLF = TLF.add(PivotOffset).rotate(Rotation).sub(PivotOffset).mul(Scale).add(WorldPosition); - BRB = BRB.add(PivotOffset).rotate(Rotation).sub(PivotOffset).mul(Scale).add(WorldPosition); - this.Voxel = new AABBf(BRB,TLF); - //} - return Voxel; - } - - public CollisionMesh SetWorldPosition(Vector3f newPos){ - this.WorldPosition = new Vector3f(newPos); - return this; - } - - public void SetScaleTransform(Vector3f Scale){ - this.Scale = new Vector3f(Scale); - } - - public void SetRotationTransform(Quaternionf quaternionf){ - this.Rotation = new Quaternionf(quaternionf); - } - - public void GenerateCollisionMeshFromVulkanModel(ModelData vkModel) throws IOException { - Polygons.clear(); - DataInputStream VertexInput = new DataInputStream(new BufferedInputStream( - new FileInputStream(vkModel.VertexPath()))); - DataInputStream IndexInput = new DataInputStream(new BufferedInputStream( - new FileInputStream(vkModel.IndexPath()))); - List Vertices = new ArrayList<>(); - int totalFloatCount = 0; - - for (MeshData meshData : vkModel.Meshes()) { - int floatsToRead = meshData.VertexSize() / VulkanUtils.FLOAT_SIZE; - float[] meshFloats = new float[floatsToRead]; - for (int i = 0; i < floatsToRead; i++) { - meshFloats[i] = VertexInput.readFloat(); - } - Vertices.add(meshFloats); - totalFloatCount += floatsToRead; - } - - float[] FullMeshFloatArr = new float[totalFloatCount]; - int iterator = 0; - for (float[] meshFloats : Vertices) { - System.arraycopy(meshFloats, 0, FullMeshFloatArr, iterator, meshFloats.length); - iterator += meshFloats.length; - } - List Indices = new ArrayList<>(); - int IndexCount = 0; - int vertexOffset = 0; - int vertexStride = 14; - for (MeshData meshData : vkModel.Meshes()) { - int intsToRead = meshData.IndexSize() / VulkanUtils.INT_SIZE; - int[] meshIndices = new int[intsToRead]; - for (int i = 0; i < intsToRead; i++) { - meshIndices[i] = IndexInput.readInt() + vertexOffset; - } - Indices.add(meshIndices); - IndexCount += intsToRead; - int meshVertexCount = (meshData.VertexSize() / VulkanUtils.FLOAT_SIZE) / vertexStride; - vertexOffset += meshVertexCount; - } - int[] FullMeshIndexArr = new int[IndexCount]; - iterator = 0; - for (int[] meshIndices : Indices) { - System.arraycopy(meshIndices, 0, FullMeshIndexArr, iterator, meshIndices.length); - iterator += meshIndices.length; - } - for(int i = 0; i < IndexCount/(3); i++){ - Vector3f[] points = new Vector3f[3]; - for(int j = 0; j < 3; j++){ - int Start = (i * 3) + j; - int elementOffset = FullMeshIndexArr[Start] * vertexStride; - points[j] = new Vector3f( - (FullMeshFloatArr[elementOffset]), - (FullMeshFloatArr[elementOffset + 1]), - (FullMeshFloatArr[elementOffset + 2]) - ); - } - AddNewCollisionPoly(points[0],points[1],points[2]); - } - } - - public void CheckAABbounds(Vector3f v1, Vector3f v2, Vector3f v3){ - float localMinX = Math.min(v1.x, Math.min(v2.x, v3.x)); - float localMinY = Math.min(v1.y, Math.min(v2.y, v3.y)); - float localMinZ = Math.min(v1.z, Math.min(v2.z, v3.z)); - float localMaxX = Math.max(v1.x, Math.max(v2.x, v3.x)); - float localMaxY = Math.max(v1.y, Math.max(v2.y, v3.y)); - float localMaxZ = Math.max(v1.z, Math.max(v2.z, v3.z)); - TopRightFront.x = Math.max(TopRightFront.x, localMaxX); - TopRightFront.y = Math.max(TopRightFront.y, localMaxY); - TopRightFront.z = Math.max(TopRightFront.z, localMaxZ); - BottomLeftBack.x = Math.min(BottomLeftBack.x, localMinX); - BottomLeftBack.y = Math.min(BottomLeftBack.y, localMinY); - BottomLeftBack.z = Math.min(BottomLeftBack.z, localMinZ); - } - - public void GenerateSensorsFromVertices(){ - if(Actor.Actors.get(ParentID) != null &&Actor.Actors.get(ParentID).PhysicsType == Actor.PhysicsControllerType.T4JLegacyCollision) { - LegacyPhysicsController physicsController = (LegacyPhysicsController)Actor.Actors.get(ParentID).GetPhysicsController(); - physicsController.collisionSensors.clear(); - for(int i = 0; i < Vertices.size(); i++){ - physicsController.AddCollisionSensor(Vertices.get(i)); - } - } - } - - public void AddNewCollisionPoly(Vector3f v1, Vector3f v2, Vector3f v3){ - Vector3f[] vertices = new Vector3f[]{v1,v2,v3}; - int[] Index = new int[3]; - for(int i = 0; i < 3; i++) { - String Vertex = vertices[i].x + "_" + vertices[i].y + "_" + vertices[i].z; - Index[i] = Vertices.size(); - if (VertexLookup.containsKey(Vertex)) { - Index[i] = VertexLookup.get(Vertex); - } else { - Vertices.add(new Vector3f(vertices[i])); - VertexLookup.put(Vertex, Index[i]); - } - } - CollisionIndexPoly newPoly = new CollisionIndexPoly(Index[0],Index[1],Index[2]); - Polygons.add(newPoly); - CheckAABbounds(v1,v2,v3); - } - - public boolean CheckAABBCollisionAgainstAABB(Vector3f inTopLeftFront, Vector3f inBottomRightBack){ - AABBf OtherVoxel = new AABBf(inBottomRightBack,inTopLeftFront); - Vector3f TLF = new Vector3f(TopRightFront); - Vector3f BRB = new Vector3f(BottomLeftBack); - TLF = TLF.mul(Scale).rotate(Rotation).add(WorldPosition); - BRB = BRB.mul(Scale).rotate(Rotation).add(WorldPosition); - AABBf ThisVoxel = new AABBf(BRB,TLF); - this.Voxel = ThisVoxel; - return ThisVoxel.intersectsAABB(OtherVoxel); - } - - public boolean CheckAABBCollisionAgainstAABB(AABBf OtherVoxel){ - Vector3f PivotOffset = Actor.Actors.get(ParentID) != null ? new Vector3f(Actor.Actors.get(ParentID).GetPivotOffset()).add(Actor.Actors.get(ParentID).GetAditionalPivotOffset()) : new Vector3f(0,0,0); - Vector3f TLF = new Vector3f(TopRightFront); - Vector3f BRB = new Vector3f(BottomLeftBack); - TLF = TLF.add(PivotOffset).rotate(Rotation).sub(PivotOffset).mul(Scale).add(WorldPosition); - BRB = BRB.add(PivotOffset).rotate(Rotation).sub(PivotOffset).mul(Scale).add(WorldPosition); - AABBf ThisVoxel = new AABBf(BRB,TLF); - this.Voxel = ThisVoxel; - return ThisVoxel.intersectsAABB(OtherVoxel); - } - - public boolean CheckAABCollision(Vector3f Origin, Vector3f Sensor){ - Vector3f LineDirection = new Vector3f(Sensor).sub(Origin); - Vector2f Result = new Vector2f(); - Vector3f TLF = new Vector3f(TopRightFront); - Vector3f BRB = new Vector3f(BottomLeftBack); - TLF = TLF.mul(Scale).rotate(Rotation).add(WorldPosition); - BRB = BRB.mul(Scale).rotate(Rotation).add(WorldPosition); - AABBf ThisVoxel = new AABBf(BRB,TLF); - return Intersectionf.intersectRayAab(Origin, LineDirection,BRB,TLF,Result) && Result.x <= 1.0f && Result.y >= 0.0f; - } - - public boolean SimpleCheckCollision(Vector3f Origin, Vector3f Sensor){ - Vector3f LineDirection = new Vector3f(Sensor).sub(Origin); - Vector2f Result = new Vector2f(0,0); - CollisionPoly[] polygons = GetAllPolygons(); - if(Intersectionf.intersectRayAab(Origin, LineDirection, BottomLeftBack, TopRightFront,Result) && Result.x <= 1.0f && Result.y >= 0.0f){ - for (CollisionPoly polygon : polygons) { - if (T4Math.Math3D.DoesLineCollideWithPoly(Origin, Sensor, new Vector3f[]{polygon.v1(), polygon.v2(), polygon.v3()})) { - return true; - } - } - } - return false; - } - - public Vector3f[] GetTransformedVertices(int[] index){ - Vector3f PivotOffset = Actor.Actors.get(ParentID) != null ? new Vector3f(Actor.Actors.get(ParentID).GetPivotOffset()).add(Actor.Actors.get(ParentID).GetAditionalPivotOffset()) : new Vector3f(0,0,0); - Vector3f[] vertices = new Vector3f[index.length]; - Vector3f Vertex = new Vector3f(); - for(int i = 0; i < vertices.length; i++) { - if (index[i] < Vertices.size() && Vertices.get(index[i]) != null) { - Vertex.set((Vertices.get(index[i]))); - Vertex.add(PivotOffset).rotate(Rotation).sub(PivotOffset).mul(Scale).add(WorldPosition); - vertices[i] = new Vector3f(Vertex); - } - } - return vertices; - } - - public Vector3f[] GetUntransformedVertices(int[] index){ - Vector3f[] vertices = new Vector3f[index.length]; - Vector3f Vertex = new Vector3f(); - for(int i = 0; i < vertices.length; i++) { - if (index[i] < Vertices.size() && Vertices.get(index[i]) != null) { - Vertex.set((Vertices.get(index[i]))); - vertices[i] = new Vector3f(Vertex); - } - } - return vertices; - } - - public Vector3f GetTransformedVertex(int index){ - Vector3f PivotOffset = Actor.Actors.get(ParentID) != null ? new Vector3f(Actor.Actors.get(ParentID).GetPivotOffset()).add(Actor.Actors.get(ParentID).GetAditionalPivotOffset()) : new Vector3f(0,0,0); - if(index > Vertices.size() || index < 0) return null; - Vector3f Vertex = new Vector3f(Vertices.get(index)); - Vertex.add(PivotOffset).rotate(Rotation).sub(PivotOffset).mul(Scale).add(WorldPosition); - return Vertex; - } - - public CollisionPoly[] GetAllPolygons(){ - int Rows = Polygons.size(); - CollisionPoly[] PolygonArr = new CollisionPoly[Rows * 3]; - Vector3f PivotOffset = Actor.Actors.get(ParentID) != null ? new Vector3f(Actor.Actors.get(ParentID).GetPivotOffset()).add(Actor.Actors.get(ParentID).GetAditionalPivotOffset()) : new Vector3f(0,0,0); - for(int row = 0; row < Rows; row++){ - CollisionIndexPoly IndexPoly = Polygons.get(row); - CollisionPoly CollisionPoly = IndexPoly.GetRawCollisionPoly(this); - PolygonArr[row] = CollisionPoly.TransformPosition(PivotOffset).TransformRotation(Rotation).TransformPosition(PivotOffset.negate()).TransformScale(Scale).TransformPosition(WorldPosition); - } - return PolygonArr; - } - - public Vector3f[] GetAllVertices(){ - Vector3f PivotOffset = Actor.Actors.get(ParentID) != null ? new Vector3f(Actor.Actors.get(ParentID).GetPivotOffset()).add(Actor.Actors.get(ParentID).GetAditionalPivotOffset()) : new Vector3f(0,0,0); - Vector3f[] vertices = new Vector3f[Vertices.size()]; - Vector3f Vertex = new Vector3f(); - for(int i = 0; i < vertices.length; i++) { - if (Vertices.get(i) != null) { - Vertex.set((Vertices.get(i))); - Vertex.add(PivotOffset).rotate(Rotation).sub(PivotOffset).mul(Scale).add(WorldPosition); - vertices[i] = new Vector3f(Vertex); - } - } - return vertices; - } -} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/LegacyCollision/CollisionPoly.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/LegacyCollision/CollisionPoly.java deleted file mode 100644 index b311681..0000000 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/LegacyCollision/CollisionPoly.java +++ /dev/null @@ -1,76 +0,0 @@ -package net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyCollision; - -import net.halbear.Terrain4J.EngineCore.Main.Util.Maths.T4Math; -import org.joml.Math; -import org.joml.Quaternionf; -import org.joml.Vector3f; - -public record CollisionPoly(Vector3f v1, Vector3f v2, Vector3f v3, Vector3f Centre) { - public Vector3f CalculateCentre(){ - float x = v1.x + v2.x + v3.x; - float y = v1.y + v2.y + v3.y; - float z = v1.z + v2.z + v3.z; - x/=3f; - y/=3f; - z/=3f; - Centre.set(new Vector3f(x,y,z)); - return Centre; - } - public Vector3f[] GetVertices(){return new Vector3f[]{v1,v2,v3};} - public CollisionPoly TransformRotation(Quaternionf quaternionf){ - if(quaternionf == null ) return this; - Vector3f newV1 = new Vector3f(v1); - newV1.rotate(quaternionf); - Vector3f newV2 = new Vector3f(v2); - newV2.rotate(quaternionf); - Vector3f newV3 = new Vector3f(v3); - newV3.rotate(quaternionf); - CollisionPoly newPoly = new CollisionPoly(newV1,newV2,newV3,new Vector3f()); - newPoly.CalculateCentre(); - return newPoly; - } - public CollisionPoly TransformScale(Vector3f Scale){ - if(Scale == null ) return this; - Vector3f newV1 = new Vector3f(v1); - newV1.mul(Scale); - Vector3f newV2 = new Vector3f(v2); - newV2.mul(Scale); - Vector3f newV3 = new Vector3f(v3); - newV3.mul(Scale); - CollisionPoly newPoly = new CollisionPoly(newV1,newV2,newV3,new Vector3f()); - newPoly.CalculateCentre(); - return newPoly; - } - public CollisionPoly TransformPosition(Vector3f Position){ - if(Position == null ) return this; - Vector3f newV1 = new Vector3f(v1); - newV1.add(Position); - Vector3f newV2 = new Vector3f(v2); - newV2.add(Position); - Vector3f newV3 = new Vector3f(v3); - newV3.add(Position); - CollisionPoly newPoly = new CollisionPoly(newV1,newV2,newV3,new Vector3f()); - newPoly.CalculateCentre(); - return newPoly; - } - public static CollisionPoly TransformPosition(Vector3f Position, CollisionPoly OriginalPoly){ - Vector3f newV1 = new Vector3f(OriginalPoly.v1).add(Position); - Vector3f newV2 = new Vector3f(OriginalPoly.v2).add(Position); - Vector3f newV3 = new Vector3f(OriginalPoly.v3).add(Position); - CollisionPoly newPoly = new CollisionPoly(newV1,newV2,newV3,new Vector3f()); - newPoly.CalculateCentre(); - return newPoly; - } - public Vector3f CalculateNormal(){ - Vector3f U = new Vector3f(v2.sub(v1)); - Vector3f V = new Vector3f(v3.sub(v1)); - - Vector3f N = new Vector3f(U.mul(V)); - float Nx = (U.x * V.z) - (U.z * V.y); - float Ny = (U.z * V.x) - (U.x * V.z); - float Nz = (U.x * V.y) - (U.y * V.x); - - float Length = (float) Math.sqrt(T4Math.Square(Nx)+T4Math.Square(Ny)+T4Math.Square(Nz)); - return new Vector3f(Nx/Length, Ny/Length, Nz/Length); - } -} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/LegacyPhysicsController.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/LegacyPhysicsController.java deleted file mode 100644 index 2b8e19d..0000000 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/LegacyPhysicsController.java +++ /dev/null @@ -1,343 +0,0 @@ -package net.halbear.Terrain4J.EngineCore.Logic.Physics; - -import net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyCollision.CollisionManager; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyCollision.CollisionMesh; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyCollision.CollisionPoly; -import net.halbear.Terrain4J.EngineCore.Main.Scene.Actor; -import net.halbear.Terrain4J.EngineCore.Main.Util.Maths.T4Math; -import org.joml.Vector2f; -import org.joml.Vector3f; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import static net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyCollision.CollisionManager.ChunkWidth; -import static net.halbear.Terrain4J.EngineCore.Main.Util.Maths.T4Math.Physics.*; - -public class LegacyPhysicsController implements IPhysicsController { - - public enum CollisionType{ - PolyToPoly, - Sensor - } - - - public List collisionSensors; - public Vector3f Velocities = new Vector3f(0,0,0); - public Vector3f WeightBalance = new Vector3f(0,0,0); - public float MassKG = 10.0f; - public Vector3f TerminalVelocitiesMS = new Vector3f(36f,6.6f,36f); - public Vector3f Drag = new Vector3f(0.2f,0.2f,0.2f); - public Vector3f DragCoefficients = new Vector3f(0.1f,0.1f,0.1f); - public Vector3f CrossSectionAreas = new Vector3f(1.8f * 0.9f, 0.6f * 0.9f, 1.8f * 0.6f); - public Vector3f WeightDistribution = new Vector3f(2.0f,5.0f,7.0f); - public float FallingAcceleration = 0.0f; - public float Bounciness = 0.3f; - String CurrentChunkPosition = "NULL"; - public CollisionType MeshCollision; - - private final Vector3f Velocity = new Vector3f(); - private final Vector3f Position = new Vector3f(); - private final Vector3f NextPosition = new Vector3f(); - private final Vector3f localVelocityStep = new Vector3f(); - private final Vector3f displacement = new Vector3f(); - private final Vector3f slidingCorrection = new Vector3f(); - private final Vector3f sensorSubtraction = new Vector3f(); - private final Vector3f pivotOffsetCache = new Vector3f(); - - private final List transformedSensorsCache = new ArrayList<>(); - - public final List Collisions = new ArrayList<>(); - - //public record CollisionResult(boolean Intersects,Vector3f StartPoint,Vector3f EndPoint){ - // - //} - public static class CollisionResult{ - public boolean Intersects = false; - public Vector3f StartPoint = null; - public Vector3f EndPoint = null; - public Vector3f CollisionNormal = null; - public float CollisionDepth; - } - - public void SetCollisionType(CollisionType collisionType){ - this.MeshCollision = collisionType; - } - public CollisionType GetCollisionType(){return MeshCollision;} - - public final String ID; - public final String ParentID; - - public void ImpulseVelocity(Vector3f Velocity){ - Velocities.add(Velocity); - } - - public LegacyPhysicsController(String ActorID, CollisionType collisionType){ - MeshCollision = collisionType; - collisionSensors = new ArrayList<>(); - ID = ActorID + "_PHYSICS_CONTROLLER"; - ParentID = ActorID; - WorldPhysicsManager.PhysicsObjects.put(ID, this); - WorldPhysicsManager.ActiveControllers.add(ID); - Actor actor = Actor.Actors.get(ParentID); - Vector3f WorldPos = new Vector3f(actor.GetPosition()).div(ChunkWidth); - WorldPos.x = (int)Math.floor(WorldPos.x); - WorldPos.y = (int)Math.floor(WorldPos.y); - WorldPos.z = (int)Math.floor(WorldPos.z); - CurrentChunkPosition = WorldPos.x + ":" + WorldPos.y + ":" + WorldPos.z; - DragCoefficients = CalculateDragCoefficients(TerminalVelocitiesMS, MassKG,CrossSectionAreas, actor.GetScale()); - } - - public LegacyPhysicsController AddCollisionSensor(Vector3f RelativeOffset){ - collisionSensors.add(new CollisionSensor(RelativeOffset, ParentID)); - return this; - } - - @Override - public boolean ApplyRotationalForce() { - return false; - } - - @Override - public String ID() { - return ""; - } - - @Override - public String ActorID() { - return ""; - } - - @Override - public String MeshID() { - return ""; - } - - //aaaaand i give up on this system, time to attempt something completely different - public void PhysicsTick(float DeltaTime, float TargetFrameRate){ - Actor actor = Actor.Actors.get(ParentID); - if (actor == null) return; - - Position.set(actor.GetPosition()); - NextPosition.set(Position); - - localVelocityStep.set(Velocities).mul(DeltaTime); - NextPosition.add(localVelocityStep); - - boolean ValidMovement = true; - Vector3f scale = new Vector3f(1,1,1); - Drag = CalculateDrag(TerminalVelocitiesMS, DragCoefficients,CrossSectionAreas, scale); - FallingAcceleration = CalculateFallSpeed(MassKG, Drag, scale); - - Velocities.y -= (FallingAcceleration / (TargetFrameRate * 2f)) * DeltaTime; - - float dragFactor = 1f - (WorldPhysicsManager.Drag * DeltaTime); - Velocities.set(Velocities.x * dragFactor, Velocities.y, Velocities.z * dragFactor); - - List CollisionMeshesToCycleThrough = CollisionManager.GetAllCollisionMeshes(); - if (MeshCollision == CollisionType.Sensor && collisionSensors != null && !collisionSensors.isEmpty()) { - ValidMovement = CalculateSensorCollision(CollisionMeshesToCycleThrough, actor); - } else if (MeshCollision == CollisionType.PolyToPoly) { - ValidMovement = CalculateMeshCollision(CollisionMeshesToCycleThrough, actor); - } - - actor.SetPosition(NextPosition); - } - - @Override - public List Collisions() { - return Collisions; - } - - public boolean CalculateMeshCollision(List CollisionMeshesToCycleThrough, Actor actor){ - float skinThickness = 0.001f; - CollisionMesh thisCollisionMesh = actor.GetCollisionMesh(); - // Logger.debug("POLY TO POLY"); - if (thisCollisionMesh == null) return false; - - CollisionPoly[] thisPolygons = thisCollisionMesh.GetAllPolygons(); - boolean hasCollidedThisFrame = false; - for (int i = 0; i < CollisionMeshesToCycleThrough.size(); i++) { - CollisionMesh collisionMesh = CollisionMeshesToCycleThrough.get(i); - - if (collisionMesh != null && - !Objects.equals(collisionMesh.ID, thisCollisionMesh.ID) && !Collisions.contains(collisionMesh.ID) && - collisionMesh.CheckAABBCollisionAgainstAABB(thisCollisionMesh.GetVoxelCollider())) { - CollisionPoly[] polygons = collisionMesh.GetAllPolygons(); - - for (int k = 0; k < thisPolygons.length; k++) { - for (int j = 0; j < polygons.length; j++) { - - CollisionResult result = T4Math.ComplexCollision.ComputePolyToPolyIntersection(thisPolygons[k], polygons[j]); - - if (result != null && result.Intersects) { - hasCollidedThisFrame = true; - Collisions.add(collisionMesh.ID); - - float totalPushDistance = result.CollisionDepth + skinThickness; - displacement.set(result.CollisionNormal).mul(totalPushDistance); - if(result.CollisionDepth < 0.01f) { - NextPosition.set(Position).add(0,displacement.y,0); - } - float velocityAlongNormal = Velocities.dot(result.CollisionNormal); - // if (velocityAlongNormal < 0) { - // slidingCorrection.set(result.CollisionNormal).mul(velocityAlongNormal); - // Velocities.sub(slidingCorrection); - // Velocities.mul(0.98f); // Apply wall friction sliding damping - // } - Velocities.mul(result.CollisionNormal).mul(Bounciness); - // thisCollisionMesh.updatePositionContext(NextPosition); - } - } - } - } - } - return !hasCollidedThisFrame; - - - /*float skinThickness = 0.001f; - float totalPushDistance = 0; - Vector3f displacement = new Vector3f(); - Vector3f slidingCorrection = new Vector3f(); - CollisionMesh thisCollisionMesh = actor.GetCollisionMesh(); - boolean ValidMovement = true; - if(thisCollisionMesh == null) return false; - CollisionPoly[] thisPolygons = thisCollisionMesh.GetAllPolygons(); - for (int i = 0; i < CollisionMeshesToCycleThrough.size(); i++) { - CollisionMesh collisionMesh = CollisionMeshesToCycleThrough.get(i); - if (collisionMesh != null && !Objects.equals(collisionMesh.ID, thisCollisionMesh.ID) && collisionMesh.CheckAABBCollisionAgainstAABB(thisCollisionMesh.GetVoxelCollider())) { - CollisionPoly[] polygons = collisionMesh.GetAllPolygons(); - for(int k = 0; k < thisPolygons.length; k++) { - for (int j = 0; j < polygons.length; j++) { - CollisionResult result = T4Math.ComplexCollision.ComputePolyToPolyIntersection(thisPolygons[k], polygons[j]); - if(result != null && result.Intersects){ - totalPushDistance = result.CollisionDepth + skinThickness; - displacement.set(result.CollisionNormal).mul(totalPushDistance); - float velocityAlongNormal = Velocities.dot(result.CollisionNormal); - if(velocityAlongNormal < 0){ - slidingCorrection.set(result.CollisionNormal).mul(velocityAlongNormal); - Velocities.sub(slidingCorrection); - Velocities.mul(0.98f); - } - //Velocities.y = -Velocities.y * Bounciness;//Velocities.mul(result.CollisionNormal).mul(Bounciness); - Logger.debug(displacement + "<- DISPLACEMENT " + NextPosition + "<- NEXTPOS " + Position + "<- POS"); - NextPosition.add(displacement); - ValidMovement = false; - } - if (!ValidMovement) break; - } - if (!ValidMovement) break; - } - } - if (!ValidMovement) break; - } - return ValidMovement;*/ - } - - public void CollisionEvent(CollisionMesh collidingMesh, Vector3f PositionDifference, Vector2f CollisionScale){ - Collisions.add(collidingMesh.ID); - if (Math.abs(PositionDifference.x) > 0.01f && Math.abs(PositionDifference.z) > 0.01f) { - NextPosition.add(PositionDifference); - } - } - - public boolean CalculateSensorCollision(List CollisionMeshesToCycleThrough, Actor actor){ - boolean hasCollidedThisFrame = false; - - Actor parentActor = Actor.Actors.get(ParentID); - if (parentActor != null) { - pivotOffsetCache.set(parentActor.GetPivotOffset()).add(parentActor.GetAditionalPivotOffset()); - } else { - pivotOffsetCache.set(0, 0, 0); - } - - while (transformedSensorsCache.size() < collisionSensors.size()) { - transformedSensorsCache.add(new Vector3f()); - } - for (int j = 0; j < collisionSensors.size(); j++) { - transformedSensorsCache.get(j).set(collisionSensors.get(j).GetTransformedCollisionSensor()); - } - Vector2f CollisionScale = new Vector2f(); - for (int i = 0; i < CollisionMeshesToCycleThrough.size(); i++) { - CollisionMesh collisionMesh = CollisionMeshesToCycleThrough.get(i); - - if (collisionMesh != null && - !Objects.equals(collisionMesh.ID, actor.GetCollisionMesh().ID) && !Collisions.contains(collisionMesh.ID)&& - collisionMesh.CheckAABBCollisionAgainstAABB(actor.GetCollisionMesh().GetVoxelCollider())) { - - CollisionPoly[] polygons = collisionMesh.GetAllPolygons(); - - for (int j = 0; j < polygons.length; j++) { - CollisionPoly poly = polygons[j]; - if (poly == null) continue; - - for (int k = 0; k < collisionSensors.size(); k++) { - - Vector3f CollisionPoint = T4Math.Math3D.LineCollisionPointWithPoly( - NextPosition, transformedSensorsCache.get(k), poly.GetVertices(),CollisionScale); - - if (CollisionPoint != null) { - hasCollidedThisFrame = true; - - sensorSubtraction.set(NextPosition).sub(CollisionPoint); - if (Math.abs(sensorSubtraction.x) > 0.01f && Math.abs(sensorSubtraction.z) > 0.01f) { - NextPosition.sub(sensorSubtraction); - } else { - NextPosition.sub(0, sensorSubtraction.y, 0); - } - Collisions.add(collisionMesh.ID); - if(collisionMesh.ParentID != "NULL" && Actor.Actors.get(collisionMesh.ParentID) != null){ - Actor.Actors.get(collisionMesh.ParentID).GetPhysicsController().CollisionEvent(Actor.Actors.get(ParentID).GetCollisionMesh(),sensorSubtraction,CollisionScale); - } - Velocities.y = -Velocities.y * Bounciness; - if (Math.abs(Velocities.y) < 0.05f) { - Velocities.y = 0; - } - } - } - } - } - } - return !hasCollidedThisFrame; - - /*boolean ValidMovement = true; - Vector3f PivotOffset = Actor.Actors.get(ParentID) != null ? new Vector3f(Actor.Actors.get(ParentID).GetPivotOffset()).add(Actor.Actors.get(ParentID).GetAditionalPivotOffset()) : new Vector3f(0, 0, 0); - List CollidingSensors = new ArrayList<>(); - for (int j = 0; j < collisionSensors.size(); j++) { - CollidingSensors.add(new Vector3f().set(collisionSensors.get(j).GetTransformedCollisionSensor())); - } - Vector3f Subtraction = new Vector3f(); - if (!CollidingSensors.isEmpty()) { - for (int i = 0; i < CollisionMeshesToCycleThrough.size(); i++) { - CollisionMesh collisionMesh = CollisionMeshesToCycleThrough.get(i); - if (collisionMesh != null && !Objects.equals(collisionMesh.ID, actor.GetCollisionMesh().ID) && collisionMesh.CheckAABBCollisionAgainstAABB(actor.GetCollisionMesh().GetVoxelCollider())) { - CollisionPoly[] polygons = collisionMesh.GetAllPolygons(); - for (int j = 0; j < polygons.length; j++) { - CollisionPoly poly = polygons[j]; - if (poly != null) { - for (int k = 0; k < CollidingSensors.size(); k++) { - Vector3f CollisionPoint = T4Math.Math3D.LineCollisionPointWithPoly(NextPosition, CollidingSensors.get(k), new Vector3f[]{poly.v1(), poly.v2(), poly.v3()}); - if (CollisionPoint != null) { - Subtraction.set(NextPosition).sub(CollisionPoint); - if (Math.abs(Subtraction.x) > 0.1f && Math.abs(Subtraction.z) > 0.1f) { - NextPosition.sub(Subtraction); - } else { - NextPosition.sub(0, Subtraction.y, 0); - } - Velocities.y = -Velocities.y * Bounciness; - if (Math.abs(Velocities.y) < 0.05f) Velocities.y = 0; - ValidMovement = false; - } - if (!ValidMovement) break; - } - } - if (!ValidMovement) break; - } - } - if (!ValidMovement) break; - } - } - return ValidMovement;*/ - } -} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/RigidBody/ConvexMesh.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/RigidBody/ConvexMesh.java index 0aa95e0..afdcf34 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/RigidBody/ConvexMesh.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/RigidBody/ConvexMesh.java @@ -114,7 +114,7 @@ public class ConvexMesh { int[][] e = {{0,1},{1,2},{2,3},{3,0},{4,5},{5,6},{6,7},{7,4},{0,4},{1,5},{2,6},{3,7}}; mesh.Edges.addAll(Arrays.asList(e)); - if(!PrimaryRuntime.Server && !RenderThread.Headless) { + if(!PrimaryRuntime.IsServer && !RenderThread.Headless) { PrimaryRuntime.GetEngineInstance().scene().AddActor(new VisualisedCollisionActor("VISUALISEDACTOR" + mesh.MeshID.toString(), mesh.Position, mesh.MeshID)); } return mesh; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/RigidBody/RigidBody.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/RigidBody/RigidBody.java index 32ec31d..5dbfa0f 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/RigidBody/RigidBody.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/RigidBody/RigidBody.java @@ -1,7 +1,6 @@ package net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody; import net.halbear.Terrain4J.EngineCore.Logic.Physics.IPhysicsController; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyPhysicsController; import org.joml.Matrix3f; import org.joml.Quaternionf; import org.joml.Vector3f; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/RigidBody/RigidPhysicsController.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/RigidBody/RigidPhysicsController.java index a6a0021..aa5f351 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/RigidBody/RigidPhysicsController.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/RigidBody/RigidPhysicsController.java @@ -1,20 +1,16 @@ package net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyCollision.CollisionMesh; import net.halbear.Terrain4J.EngineCore.Logic.Physics.IPhysicsController; import net.halbear.Terrain4J.EngineCore.Logic.Physics.WorldPhysicsManager; import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; import net.halbear.Terrain4J.EngineCore.Main.Scene.Actor; +import net.halbear.Terrain4J.EngineCore.ServerNetworking.ClientSideNetworkUtils; import net.halbear.Terrain4J.EngineCore.Threads.ClientConnectionThread; -import org.joml.Vector2f; import org.joml.Vector3f; import java.util.*; -import static net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidBody.RigidBodies; import static net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidBody.RigidBodyRegister; -import static net.halbear.Terrain4J.EngineCore.Main.Util.Maths.T4Math.Physics.CalculateDrag; -import static net.halbear.Terrain4J.EngineCore.Main.Util.Maths.T4Math.Physics.CalculateFallSpeed; public class RigidPhysicsController implements IPhysicsController { @@ -105,11 +101,11 @@ public class RigidPhysicsController implements IPhysicsController { public void PhysicsTick(float DeltaTime, float TargetFrameRate) { Actor actor = Actor.Actors.get(ActorID); - if(!PrimaryRuntime.Server - && ClientConnectionThread.Connected + if(!PrimaryRuntime.IsServer + && ClientSideNetworkUtils.Connected && actor != null && actor.IsServerSynced() - && !ActorID.equals(ClientConnectionThread.OwnedActorID)) { + && !ClientSideNetworkUtils.OwnsActor(ActorID)) { return; } @@ -121,7 +117,7 @@ public class RigidPhysicsController implements IPhysicsController { rigidBody.Integrate(DeltaTime, new Vector3f(0,-1.8f,0)); if(Actor.Actors.get(ActorID) != null) { Actor.Actors.get(ActorID).SetPosition(new Vector3f(rigidBody.Position)); - if(ApplyRotation) Actor.Actors.get(ActorID).SetRotation(rigidBody.Rotation); + if(ApplyRotation && Actor.Actors.get(ActorID) != null) Actor.Actors.get(ActorID).SetRotation(rigidBody.Rotation); } } /* @@ -149,8 +145,4 @@ public class RigidPhysicsController implements IPhysicsController { return Collisions; } - @Override - public void CollisionEvent(CollisionMesh collidingMesh, Vector3f PositionDifference, Vector2f CollisionScale) { - - } } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/WorldPhysicsManager.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/WorldPhysicsManager.java index aaf38c9..6ae7513 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/WorldPhysicsManager.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Physics/WorldPhysicsManager.java @@ -4,6 +4,7 @@ import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.*; import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; import net.halbear.Terrain4J.EngineCore.Main.Scene.Actor; +import net.halbear.Terrain4J.EngineCore.ServerNetworking.ClientSideNetworkUtils; import net.halbear.Terrain4J.EngineCore.Threads.ClientConnectionThread; import net.halbear.Terrain4J.EngineCore.Threads.InstancedPhysicsThread; import org.joml.Vector2f; @@ -30,6 +31,7 @@ public class WorldPhysicsManager { private static boolean SingleThread = false; private static List physicsThreads = new ArrayList<>(); + @Deprecated public static void SteppedPhysicsTick(float DeltaTime, float TargetFrameTime){ int ThreadsNeeded = (int)Math.floor(ActiveControllers.size()/100f); SingleThread = ThreadsNeeded <= 1; @@ -63,6 +65,7 @@ public class WorldPhysicsManager { // } } + @Deprecated public static void SteppedPhysicsTick2(float DeltaTime, float TargetFrameTime){ DeltaTime *= EngineConfig.getInstance().PhysicsSpeed(); if(EngineConfig.getInstance().IsEngineThrottled()) return; @@ -88,6 +91,7 @@ public class WorldPhysicsManager { PhysicsObjects.get(ActiveControllers.get(i)).Collisions().clear(); } } + private static void ResolveAllCollisions() { List ids = RigidBody.RigidBodies; @@ -135,7 +139,7 @@ public class WorldPhysicsManager { } private static boolean IsClientRemoteNetworkBody(RigidBody body) { - if (PrimaryRuntime.Server || !ClientConnectionThread.Connected || body == null) { + if (PrimaryRuntime.IsServer || !ClientSideNetworkUtils.Connected || body == null) { return false; } @@ -146,7 +150,7 @@ public class WorldPhysicsManager { Actor actor = GetActorForRigidBody(body); return actor != null && actor.IsServerSynced() - && !actor.GetID().equals(ClientConnectionThread.OwnedActorID); + && !actor.GetID().equals(ClientSideNetworkUtils.OwnedActorID); } @@ -204,6 +208,7 @@ public class WorldPhysicsManager { } } + @Deprecated private static void SyncRigidBodiesToActors(){ for (int i = 0; i < ActiveControllers.size(); i++) { IPhysicsController controller = PhysicsObjects.get(ActiveControllers.get(i)); @@ -214,10 +219,10 @@ public class WorldPhysicsManager { if(actor == null || body == null) continue; - if(!PrimaryRuntime.Server - && ClientConnectionThread.Connected + if(!PrimaryRuntime.IsServer + && ClientSideNetworkUtils.Connected && actor.IsServerSynced() - && !actor.GetID().equals(ClientConnectionThread.OwnedActorID)) { + && !actor.GetID().equals(ClientSideNetworkUtils.OwnedActorID)) { continue; } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Rendering/ModelCompiler.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Rendering/ModelCompiler.java index c3036ce..4573150 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Rendering/ModelCompiler.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Rendering/ModelCompiler.java @@ -5,11 +5,11 @@ import com.beust.jcommander.Parameter; import com.beust.jcommander.ParameterException; import com.google.gson.FieldNamingPolicy; import com.google.gson.GsonBuilder; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.MaterialData; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.MeshData; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.ModelBinaryData; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.ModelData; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.MaterialData; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.MeshData; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.ModelBinaryData; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.ModelData; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.joml.Vector4f; import org.lwjgl.PointerBuffer; import org.lwjgl.assimp.*; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Rendering/ModelLoader.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Rendering/ModelLoader.java index 64c5b80..c400527 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Rendering/ModelLoader.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Rendering/ModelLoader.java @@ -2,8 +2,8 @@ package net.halbear.Terrain4J.EngineCore.Logic.Rendering; import com.google.gson.FieldNamingPolicy; import com.google.gson.GsonBuilder; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.MaterialData; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.ModelData; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.MaterialData; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.ModelData; import org.tinylog.Logger; import java.nio.file.Files; @@ -28,7 +28,7 @@ public class ModelLoader { // Model Utility class kinda like a model version of } catch (Exception e) { throw new RuntimeException(e); } - Logger.debug("Loaded Material Data: [{}]", Result.toString()); + //Logger.debug("Loaded Material Data: [{}]", Result.toString()); } return Result; } @@ -42,7 +42,7 @@ public class ModelLoader { // Model Utility class kinda like a model version of }catch(Exception e){ throw new RuntimeException(e); } - Logger.debug("Loaded Material Data: [{}]",Result.toString()); + //Logger.debug("Loaded Material Data: [{}]",Result.toString()); return Result; } public static ModelData LoadModel(String Path){ diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Rendering/VulkanContext.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Rendering/VulkanContext.java index 27d542f..ab808c3 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Rendering/VulkanContext.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Rendering/VulkanContext.java @@ -2,14 +2,14 @@ package net.halbear.Terrain4J.EngineCore.Logic.Rendering; import net.halbear.Terrain4J.EngineCore.Display.Window; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.PipelineCache; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.DescriptorAllocator; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.PhysicalDevice; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.Surface; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.SwapChain.SwapChain; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.VulkanInstance; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanMemoryAllocator; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.PipelineCache; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader.DescriptorAllocator; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Device; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.PhysicalDevice; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.Surface; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.SwapChain.SwapChain; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.VulkanInstance; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanMemoryAllocator; import org.tinylog.Logger; public class VulkanContext { diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/GameCore.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/GameCore.java index 746ce7c..18e951b 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/GameCore.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/GameCore.java @@ -11,12 +11,10 @@ import net.halbear.Terrain4J.EngineCore.Audio.SoundListener; import net.halbear.Terrain4J.EngineCore.Display.Window; import net.halbear.Terrain4J.EngineCore.Input.KeyboardInput; import net.halbear.Terrain4J.EngineCore.Input.MouseListener; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyCollision.CollisionMesh; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; import net.halbear.Terrain4J.EngineCore.Logic.GameLogic; import net.halbear.Terrain4J.EngineCore.Logic.InitData; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyPhysicsController; import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.ConvexMesh; import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidBody; import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidPhysicsController; @@ -26,27 +24,24 @@ import net.halbear.Terrain4J.EngineCore.Main.Scene.*; import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs.*; import net.halbear.Terrain4J.EngineCore.Profiling.CPUMonitor; import net.halbear.Terrain4J.EngineCore.Profiling.GPUProfiler; +import net.halbear.Terrain4J.EngineCore.ServerNetworking.ClientSideNetworkUtils; +import net.halbear.Terrain4J.EngineCore.ServerNetworking.ServerSideNetworkUtils; import net.halbear.Terrain4J.EngineCore.Threads.ClientConnectionThread; import net.halbear.Terrain4J.EngineCore.Threads.RenderThread; -import net.halbear.Terrain4J.EngineCore.Threads.ServerConnectionThread; -import net.halbear.Terrain4J.EngineCore.Vulkan.GUI.GuiTexture; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.MaterialData; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.ModelData; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.ForwardSceneRender; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.GUI.GuiTexture; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.MaterialData; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.ModelData; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.ForwardSceneRender; import org.joml.Matrix4f; import org.joml.Vector2f; import org.joml.Vector3f; import org.lwjgl.openal.AL11; import org.tinylog.Logger; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Set; import java.util.UUID; -import static org.lwjgl.glfw.GLFW.*; - public class GameCore implements GameLogic { private static final float MOUSE_SENSITIVITY = 0.1f; @@ -114,11 +109,20 @@ public class GameCore implements GameLogic { String texturePath = "resources/EngineResources/Texture/Terrain4JTitleImage.png"; - for(int i = 0; i < 200; i++) { + int TestSpriteCount = 0; + + for(int i = 0; i < TestSpriteCount; i++) { float height = 16 + (float)(128f* Math.random()); - scene.AddSprite(new Sprite("Title" + i, texturePath, new Vector2f(3440.0f * (float) Math.random(), 1440.0f * (float) Math.random()), new Vector2f(height,height), new Vector2f(1,1))); + scene.AddSprite( + new SpriteVk("Title" + i, + texturePath, + new Vector2f(3440.0f * (float) Math.random(), 1440.0f * (float) Math.random()), //position + new Vector2f(1,1), //size (width is modified to respect the aspect ratio of the image) + new Vector2f(height,height)) // scale + .SetCameraZValue(1-(16/height)) + ); } - boolean createOfflinePlayer = !PrimaryRuntime.Server && !ClientConnectionThread.Connected; + boolean createOfflinePlayer = !PrimaryRuntime.IsServer && !ClientSideNetworkUtils.Connected; materials.addAll(MelonaMat); materials.addAll(CollisionVisualisationMat); @@ -138,7 +142,7 @@ public class GameCore implements GameLogic { List guiTextures = new ArrayList<>(); - if(!PrimaryRuntime.Server && !RenderThread.Headless) { + if(!PrimaryRuntime.IsServer && !RenderThread.Headless) { var LoadingScreenTexture = new GuiTexture(EngineConfig.getInstance().GetLoadingScreenImageLocation()); loadingScreen = new LoadingScreen(LoadingScreenTexture); @@ -165,7 +169,7 @@ public class GameCore implements GameLogic { for(int i = 0; i < ActorEditorComponents.size(); i++){ ActorEditorComponents.get(i).UpdateAll(); } - if(PrimaryRuntime.Server) { + if(PrimaryRuntime.IsServer) { for (int x = -5; x < 6; x++) { for (int y = -5; y < 6; y++) { SpawnNewStaticActor(engineInstance, new Vector3f(x * 4f, -4 * (float) Math.random(), y * 4f), new Vector3f(0, 0, 0), new Vector3f(1, 1, 1)); @@ -175,11 +179,16 @@ public class GameCore implements GameLogic { SpawnNewActor(engineInstance, new Vector3f(-5 + (float)Math.random() * 10,10 + (float)Math.random() * 10, -5 + (float)Math.random() * 10), new Vector3f(0, 0, 0), new Vector3f(1, 1, 1)); } } - Settings.textBuffer.set(ClientConnectionThread.ServerIP); + Settings.textBuffer.set(ClientSideNetworkUtils.ServerIP); Settings.UsernameBuffer.set("Player"); return new InitData(models,materials,guiTextures); } + public void Reset(){ + EngineInstance instance = PrimaryRuntime.GetEngineInstance(); + instance.scene().Reset(); + } + private static final Vector3f SpawnPosition = new Vector3f(); private static final Vector3f SpawnDirection = new Vector3f(); private static final Matrix4f rotationMatrix = new Matrix4f(); @@ -207,8 +216,8 @@ public class GameCore implements GameLogic { scene.AddActor(Melona); - if(PrimaryRuntime.Server) { - ServerConnectionThread.BroadcastCreateActorPacket(Melona); + if(PrimaryRuntime.IsServer) { + ServerSideNetworkUtils.BroadcastCreateActorPacket(Melona); } RigidPhysicsController physicsController = (RigidPhysicsController) Melona.GetPhysicsController(); @@ -239,6 +248,7 @@ public class GameCore implements GameLogic { RigidBody.RigidBodyRegister.get(physicsController.RigidBodyID).LockRotation(); scene.AddActor(player); + scene.NetworkedActors().add(player.GetID()); return player; } @@ -255,8 +265,8 @@ public class GameCore implements GameLogic { Melona.CreatePhysicsController( ConvexMesh.Box(0.5f,0.5f,0.5f),20); Melona.SetServerSynced(true); - if(PrimaryRuntime.Server) { - ServerConnectionThread.BroadcastCreateActorPacket(Melona); + if(PrimaryRuntime.IsServer) { + ServerSideNetworkUtils.BroadcastCreateActorPacket(Melona); } RigidPhysicsController physicsController = (RigidPhysicsController) Melona.GetPhysicsController(); @@ -280,18 +290,18 @@ public class GameCore implements GameLogic { } private void InitiateAudio(EngineInstance engineInstance) { - if (RenderThread.Headless || PrimaryRuntime.Server) return; + if (RenderThread.Headless || PrimaryRuntime.IsServer) return; AudioManager audioManager = engineInstance.audioManager(); Camera camera = engineInstance.scene().GetCamera(); audioManager.SetAttenuationModel(AL11.AL_EXPONENT_DISTANCE); audioManager.SetListener(new SoundListener(camera.GetPosition())); engineInstance.scene().SetUpAudio(engineInstance, audioManager); } - public void SwitchBGM(EngineInstance engineInstance, Scene scene, String path) { - AudioInstance bgm = scene.audioInstances.get("BGM"); + public void SwitchBGM(EngineInstance engineInstance, IScene scene, String path) { + AudioInstance bgm = scene.audioInstances().get("BGM"); if (bgm == null) { scene.SetUpAudio(engineInstance, engineInstance.audioManager()); - bgm = scene.audioInstances.get("BGM"); + bgm = scene.audioInstances().get("BGM"); } bgm.Pause(); bgm.ChangePath(path, engineInstance.audioManager()); @@ -300,7 +310,7 @@ public class GameCore implements GameLogic { @Override public void CameraInput(EngineInstance engineInstance, long FrameDiffNanoSeconds) { - if(PrimaryRuntime.Server || RenderThread.Headless || engineInstance.window() == null) { + if(PrimaryRuntime.IsServer || RenderThread.Headless || engineInstance.window() == null) { return; } @@ -328,10 +338,12 @@ public class GameCore implements GameLogic { engineInstance.audioManager().UpdateListenerPosition(camera); } + long CumulativeFrameTime = 0; @Override public void RenderThreadInput(EngineInstance engineInstance, long FrameDiffNanoSeconds) { - if(ClientConnectionThread.Connected && !"NULL".equals(ClientConnectionThread.OwnedActorID)) { - PlayerActorID = ClientConnectionThread.OwnedActorID; + CumulativeFrameTime += FrameDiffNanoSeconds; + if(ClientSideNetworkUtils.Connected && !"NULL".equals(ClientSideNetworkUtils.GetPlayerControlledActorID())) { + PlayerActorID = ClientSideNetworkUtils.GetPlayerControlledActorID(); } Actor player = Actor.Actors.get(PlayerActorID); @@ -343,12 +355,12 @@ public class GameCore implements GameLogic { if(actor != null && actor.IsServerSynced() && !actor.IsStaticRigidBody() - && !actor.GetID().equals(ClientConnectionThread.OwnedActorID)) { + && !actor.GetID().equals(ClientSideNetworkUtils.GetPlayerControlledActorID())) { actor.InterpolateNetworkTarget(0.12f); } } - if(PrimaryRuntime.Server || RenderThread.Headless) return; + if(PrimaryRuntime.IsServer || RenderThread.Headless) return; engineInstance.scene().CameraTick(FrameDiffNanoSeconds); if(ChangeGraphicsSettings){ if(NextAAMode != -1){ @@ -362,21 +374,25 @@ public class GameCore implements GameLogic { } else{ LastFrameTime = System.nanoTime(); } - HandleGui(engineInstance, FrameDiffNanoSeconds); + if(CumulativeFrameTime >= 16_000_000) { + HandleGui(engineInstance, FrameDiffNanoSeconds); + CumulativeFrameTime = 0; + } } @Override public void Input(EngineInstance engineInstance, long FrameDiffNanoSeconds) { - if(PrimaryRuntime.Server || RenderThread.Headless) return; + if(PrimaryRuntime.IsServer || RenderThread.Headless) return; IScene scene = engineInstance.scene(); + scene.GlobalInput(engineInstance,FrameDiffNanoSeconds, null, MOVEMENT_SPEED,this); - if(ClientConnectionThread.Connected) { - if("NULL".equals(ClientConnectionThread.OwnedActorID)) { + if(ClientSideNetworkUtils.Connected) { + if("NULL".equals(ClientSideNetworkUtils.GetPlayerControlledActorID())) { return; } - Actor ownedActor = Actor.Actors.get(ClientConnectionThread.OwnedActorID); + Actor ownedActor = Actor.Actors.get(ClientSideNetworkUtils.GetPlayerControlledActorID()); if(!(ownedActor instanceof PlayerActor networkPlayer)) { return; } @@ -388,7 +404,7 @@ public class GameCore implements GameLogic { } } - PlayerActorID = ClientConnectionThread.OwnedActorID; + PlayerActorID = ClientSideNetworkUtils.GetPlayerControlledActorID(); // Logger.trace( // "Input using network player [{}], camera [{}]", // networkPlayer.GetID(), @@ -407,7 +423,7 @@ public class GameCore implements GameLogic { } private boolean HandleGui(EngineInstance engineInstance, long frameTimeNS){ - if(PrimaryRuntime.Server || RenderThread.Headless) return false; + if(PrimaryRuntime.IsServer || RenderThread.Headless) return false; FetchingMetrics = true; ImGuiIO imGuiIO = ImGui.getIO(); MouseListener mouseListener = engineInstance.window().getMouseInput(); @@ -415,11 +431,11 @@ public class GameCore implements GameLogic { imGuiIO.addMousePosEvent(mousePosition.x,mousePosition.y); imGuiIO.addMouseButtonEvent(0,mouseListener.isLeftButtonPressed()); imGuiIO.addMouseButtonEvent(1,mouseListener.isRightButtonPressed()); + KeyboardInput input = engineInstance.window().getKeyboardInput(); int windowFlags = ImGuiWindowFlags.NoDecoration | ImGuiWindowFlags.AlwaysAutoResize | ImGuiWindowFlags.NoSavedSettings | ImGuiWindowFlags.NoFocusOnAppearing - | ImGuiWindowFlags.NoNav | ImGuiWindowFlags.NoMove; ImGui.newFrame(); if(LoadingLevel){ @@ -452,7 +468,7 @@ public class GameCore implements GameLogic { @Override public void Update(EngineInstance engineInstance, long FrameDiffNanoSeconds) { - if(!PrimaryRuntime.Server && !RenderThread.Headless) { + if(!PrimaryRuntime.IsServer && !RenderThread.Headless) { for (int i = 0; i < VisualisedCollisionActor.CollisionVisuals.size(); i++) { VisualisedCollisionActor.CollisionVisuals.get(i).Update(); } @@ -468,43 +484,45 @@ public class GameCore implements GameLogic { float PhysicsFramerate = 24f; float PhysicsFrameTime = 1000f/PhysicsFramerate; float DeltaTime = (float)FrameDiffNanoSeconds/(PhysicsFrameTime*1000000f); - if(PrimaryRuntime.Server){ - Server.CollectIncomingPackets(); - Server.ProcessIncomingPackets(); + if(PrimaryRuntime.IsServer){ + Server.LegacyCollectIncomingPackets(); + Server.LegacyProcessIncomingPackets(); WorldPhysicsManager.PhysicsTick2(DeltaTime, PhysicsFramerate); if(PrimaryRuntime.GetFastThread().Ticks(6) == 0) { for(Actor actor : engineInstance.scene().GetActors()) { if(actor.IsServerSynced() && !actor.IsStaticRigidBody()) { - ServerConnectionThread.SendEntityUpdatePacket(actor); + ServerSideNetworkUtils.SendEntityUpdatePacket(actor); } } } - Server.ProcessOutgoingPackets(); + Server.LegacyProcessOutgoingPackets(); } else { - ClientConnectionThread.DecodePackets(engineInstance, this, engineInstance.scene()); + ClientSideNetworkUtils.DecodePackets(engineInstance, this, engineInstance.scene()); WorldPhysicsManager.PhysicsTick2(DeltaTime, PhysicsFramerate); } } @Override public void SecondUpdate(EngineInstance engineInstance) { - if(PrimaryRuntime.Server || RenderThread.Headless) return; + if(PrimaryRuntime.IsServer || RenderThread.Headless || PrimaryRuntime.GetRenderThread() == null) return; SettingPerformanceMetrics.clear(); List Metrics = new ArrayList<>(); - String[] ISceneDetails = new String[8]; + String[] ISceneDetails = new String[9]; Vector3f Position = engineInstance.scene().GetCamera().GetPosition(); + Vector2f Position2D = engineInstance.scene().Get2DCamera().GetPosition(); Vector3f Rotation = engineInstance.scene().GetCamera().GetRotation(); ISceneDetails[0] = String.format("INSTANCE INFORMATION: "); ISceneDetails[1] = String.format(" Camera Position: X: %.2f Y: %.2f Z: %.2f",Position.x ,Position.y ,Position.z); - ISceneDetails[2] = String.format(" Camera Rotation: X: %.2f° Y: %.2f° Z: %.2f°",Rotation.x *EngineConfig.RadToDeg,Rotation.y *EngineConfig.RadToDeg ,Rotation.z *EngineConfig.RadToDeg); - ISceneDetails[3] = String.format(" Anti Aliasing: " + EngineConfig.getInstance().RenderAAType().name()); - ISceneDetails[4] = String.format(" Renderer: " + (PrimaryRuntime.GetRenderThread().GetRenderer().GetDeferred() ? " Deferred" : "Forward")); - ISceneDetails[5] = String.format(" Pipeline: " + (ForwardSceneRender.DualPassRendering() ? " Dual Pass" : "Single Pass")); - ISceneDetails[6] = String.format(" AlphaToCoverage: " + EngineConfig.getInstance().AlphaToCoverage()); - ISceneDetails[7] = String.format(" FOV: %.2f°",(EngineConfig.getInstance().GetFOV()*EngineConfig.RadToDeg)); + ISceneDetails[2] = String.format(" 2DCamera Position: X: %.2f Y: %.2f",Position2D.x ,Position2D.y); + ISceneDetails[3] = String.format(" Camera Rotation: X: %.2f° Y: %.2f° Z: %.2f°",Rotation.x *EngineConfig.RadToDeg,Rotation.y *EngineConfig.RadToDeg ,Rotation.z *EngineConfig.RadToDeg); + ISceneDetails[4] = String.format(" Anti Aliasing: " + EngineConfig.getInstance().RenderAAType().name()); + ISceneDetails[5] = String.format(" Renderer: " + (!RenderThread.AllowRender() ? "NO RENDERER" : (PrimaryRuntime.GetRenderThread().GetRenderer().GetDeferred() ? " Deferred" : "Forward"))); + ISceneDetails[6] = String.format(" Pipeline: " + (ForwardSceneRender.DualPassRendering() ? " Dual Pass" : "Single Pass")); + ISceneDetails[7] = String.format(" AlphaToCoverage: " + EngineConfig.getInstance().AlphaToCoverage()); + ISceneDetails[8] = String.format(" FOV: %.2f°",(EngineConfig.getInstance().GetFOV()*EngineConfig.RadToDeg)); String[] DeviceInfo = new String[5]; DeviceInfo[0] = String.format("SYSTEM INFORMATION: "); DeviceInfo[1] = String.format(" CPU: " + EngineConfig.getInstance().GetCPUDetails()); diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/PrimaryRuntime.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/PrimaryRuntime.java index 097b715..7df6914 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/PrimaryRuntime.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/PrimaryRuntime.java @@ -1,5 +1,6 @@ package net.halbear.Terrain4J.EngineCore.Main; +import net.halbear.Executable.Server; import net.halbear.Terrain4J.EngineCore.Audio.AudioManager; import net.halbear.Terrain4J.EngineCore.Display.Window; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; @@ -9,12 +10,14 @@ import net.halbear.Terrain4J.EngineCore.Logic.InitData; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; import net.halbear.Terrain4J.EngineCore.Main.Scene.Scene; import net.halbear.Terrain4J.EngineCore.Profiling.CPUMonitor; +import net.halbear.Terrain4J.EngineCore.ServerNetworking.ClientSideNetworkUtils; import net.halbear.Terrain4J.EngineCore.Threads.ClientConnectionThread; import net.halbear.Terrain4J.EngineCore.Threads.FastTickThread; import net.halbear.Terrain4J.EngineCore.Threads.MainThread; import net.halbear.Terrain4J.EngineCore.Threads.RenderThread; import org.tinylog.Logger; +import java.io.Console; import java.io.IOException; import java.net.HttpURLConnection; import java.net.MalformedURLException; @@ -22,11 +25,14 @@ import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Scanner; import java.util.Timer; import java.util.TimerTask; +import static net.halbear.Terrain4J.EngineCore.Logic.EngineConfig.RenderAPI.OpenGL; + public class PrimaryRuntime { - public static boolean Server = false; + public static boolean IsServer = false; private int Frames = 0; private int TickFrames = 0; private double TickRate = 0; @@ -46,7 +52,7 @@ public class PrimaryRuntime { private static GameLogic gameLogic; public static ClientConnectionThread ServerCon; - public static Thread ServerThread; + public static Thread MultiplayerConnectionThread; public static GameLogic GetGameCore(){return gameLogic;} public PrimaryRuntime(String windowTitle, GameLogic appLogic) { @@ -64,7 +70,7 @@ public class PrimaryRuntime { } } } - if (Server) { + if (IsServer) { window = null; gameLogic = appLogic; engineInstance = new EngineInstance(null, new Scene(null), this, null); @@ -77,25 +83,39 @@ public class PrimaryRuntime { InitData initData = appLogic.Initialise(engineInstance); PrimaryThread = new MainThread(engineInstance, appLogic); FastThread = new FastTickThread(engineInstance, appLogic); - DrawingThread = new RenderThread(window, engineInstance, initData, appLogic); - cpuProfiler = new CPUMonitor(); - if(!Server) { + if(!IsServer) { ServerCon = new ClientConnectionThread(); - ServerThread = new Thread(ServerCon); - ServerThread.start(); + MultiplayerConnectionThread = new Thread(ServerCon); + MultiplayerConnectionThread.start(); + DrawingThread = new RenderThread(engineInstance, initData, appLogic); } + cpuProfiler = new CPUMonitor(); EngineConfig.getInstance().SetCPU(CPUMonitor.getCpuName(), CPUMonitor.getCoreCount()); Thread.currentThread().setName("Terrain4J Primary Runtime Thread"); } + + public static void RejoinMultiplayer(){ + MultiplayerConnectionThread.interrupt(); + try{ + MultiplayerConnectionThread.join(); + } catch (InterruptedException e){ + Logger.error("Cant rejoin multiplayer thread: [{}]",e.getMessage()); + } + ServerCon = new ClientConnectionThread(); + MultiplayerConnectionThread = new Thread(ServerCon); + MultiplayerConnectionThread.start(); + } + public static void StartPingTimer() { Timer timer = new Timer(); - ClientConnectionThread.pinging = true; + ClientSideNetworkUtils.pinging = true; timer.scheduleAtFixedRate(new TimerTask() {; @Override public void run() { - String text = "Pinging : " + PingServer(ClientConnectionThread.ServerIP, false); - if (ClientConnectionThread.Connected){ - ClientConnectionThread.pinging = false; + String text = "Pinging : " + PingServer(ClientSideNetworkUtils.ServerIP, false); + Logger.debug(text); + if (ClientSideNetworkUtils.Connected || !running){ + ClientSideNetworkUtils.pinging = false; this.cancel(); } } @@ -115,19 +135,19 @@ public class PrimaryRuntime { return "Client Problem, Check Internet Connection"; } if (responseCode >= 500) { - return "Server Problem, Unable To Connect"; + return "IsServer Problem, Unable To Connect"; } else return "Online"; } catch ( MalformedURLException e) { - //System.out.println(e); + //Logger.debug(e); return "Bad URL"; } catch ( IOException e ) { - //System.out.println(e); - return "Connection Error, Server Unreachable"; + //Logger.debug(e); + return "Connection Error, IsServer Unreachable"; } - } else if (!ClientConnectionThread.Connected) { + } else if (!ClientSideNetworkUtils.Connected) { ServerCon = new ClientConnectionThread(); - ServerThread = new Thread(ServerCon); - ServerThread.start(); + MultiplayerConnectionThread = new Thread(ServerCon); + MultiplayerConnectionThread.start(); } return "Connecting..."; @@ -164,6 +184,19 @@ public class PrimaryRuntime { Logger.error(e, "Primary runtime input update failed"); } } + + private static final String RESET_LINE = "\r\033[K"; + private static final String PROMPT = "Next Command -> "; + + public static synchronized void printLog(String message) { + System.out.print(RESET_LINE); + + System.out.println(message); + + System.out.print(PROMPT); + System.out.flush(); + } + public void run(){ UpdateTickRateThreshold(); @@ -175,18 +208,22 @@ public class PrimaryRuntime { OriginalFrameAccuracy = FrameAccuracy; Logger.debug("Primary Thread Started"); - if(Server) { + if(IsServer) { Logger.info("Terrain4J dedicated server running without GLFW/Vulkan/OpenAL"); + Console console = System.console(); + + System.out.println("========================================="); + System.out.println(" Terrain4J Game Server "); + System.out.println("========================================="); + + printLog("\nServer Successfully Started, Type 'Help' on how to use the commands"); + + Scanner scanner = new Scanner(System.in); while(running) { - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - break; - } + Server.ProcessCommand(scanner.nextLine()); } - + scanner.close(); ShutDownStart = System.nanoTime(); Logger.debug("Closing dedicated server [{}]", EngineConfig.getInstance().GetSoftwareName()); FastThread.KillThread(); @@ -210,6 +247,14 @@ public class PrimaryRuntime { TickDiff += cycleDiff; SecondCounter += cycleDiff; if (FrameDiff >= FrameAccuracy){ + if(window.GetLinkedApi() != EngineConfig.getInstance().GetRenderingAPI()) { + SwitchRenderAPI(); + continue; + } + if(window.GetLinkedApi() == OpenGL){ + window.pollOpenGLEvents(); + } + window.pollEvents(); Frames++; if (TickDiff >= TickRate) { @@ -232,9 +277,9 @@ public class PrimaryRuntime { } InitialTime = now; } - ClientConnectionThread.Connected = false; - if(ServerThread != null) { - ServerThread.interrupt(); + ClientSideNetworkUtils.Connected = false; + if(MultiplayerConnectionThread != null) { + MultiplayerConnectionThread.interrupt(); } ShutDownStart = System.nanoTime(); @@ -245,6 +290,47 @@ public class PrimaryRuntime { cleanup(); } + public static synchronized void PauseGameThreads() throws InterruptedException { + // PrimaryThread.FetchThread().wait(); + // FastThread.FetchThread().wait(); + } + + public static synchronized void ResumeGameThreads() { + // PrimaryThread.FetchThread().notify(); + // FastThread.FetchThread().notify(); + } + + public synchronized void SwitchRenderAPI(){ + InitData data = DrawingThread.GetInitData(); + RenderThread.AllowRender(false); + try { + PauseGameThreads(); + } catch (InterruptedException e) { + Logger.error("Failed to pause game threads: " + e.getMessage()); + } + DrawingThread.KillThread(); + try { + Logger.debug("Joining Drawing Thread"); + DrawingThread.FetchThread().join(); + } catch (InterruptedException e) { + Logger.error("Failed to wait for DrawingThread to terminate cleanly: " + e.getMessage()); + } + Logger.debug("Joined Drawing Thread"); + DrawingThread.cleanup(); + Window oldWindow = window; + window = Window.RefreshRendererAttachment(oldWindow); + engineInstance = engineInstance.SetWindow(window); + + if (window.GetLinkedApi() == OpenGL) { + org.lwjgl.glfw.GLFW.glfwMakeContextCurrent(0); + } + + Logger.debug("Render API of new Window: " + window.GetLinkedApi() + " | Engine Instance Window API: " + engineInstance.window().GetLinkedApi()); + RenderThread.AllowRender(true); + DrawingThread = new RenderThread(engineInstance,data,gameLogic); + DrawingThread.StartThread(); + ResumeGameThreads(); + } public static EngineInstance GetEngineInstance(){ return engineInstance; @@ -274,5 +360,6 @@ public class PrimaryRuntime { Logger.debug("Closing Primary Thread, Thread: [{}]",Thread.currentThread().toString()); double ShutDownTime = Math.floor(((double)(System.nanoTime() - ShutDownStart)/1000000.0)*1000.0)/1000.0; Logger.info("Successful stable Shut Down of Terrain4J in [{}] MilliSeconds", ShutDownTime); + System.exit(0); } } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Actor.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Actor.java index 0da92af..952b4a2 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Actor.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Actor.java @@ -1,13 +1,10 @@ package net.halbear.Terrain4J.EngineCore.Main.Scene; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyCollision.CollisionMesh; import net.halbear.Terrain4J.EngineCore.Logic.Physics.IPhysicsController; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyPhysicsController; import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.ConvexMesh; import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidBody; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidCollision; import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidPhysicsController; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.ModelData; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.ModelData; import org.joml.Matrix4f; import org.joml.Quaternionf; import org.joml.Vector3f; @@ -36,7 +33,6 @@ public class Actor{ protected final Vector3f Position; protected final Vector3f PositionOffset; protected final Quaternionf Rotation; - protected CollisionMesh collisionMesh; protected Vector3f Scale; private IPhysicsController physicsController; protected final Vector3f PivotOffset; @@ -52,9 +48,6 @@ public class Actor{ this.PhysicsType = type; } - public CollisionMesh GetCollisionMesh(){ - return collisionMesh; - } public Actor(String ID, String ModelID, Vector3f Position){ this.ID = ID; @@ -148,17 +141,6 @@ public class Actor{ return this; } - public Actor CreatePhysicsController(LegacyPhysicsController.CollisionType collisionType){ - physicsController = new LegacyPhysicsController(ID, collisionType); - return this; - } - - public Actor GenerateCollisionMesh(ModelData modelData) throws IOException { - collisionMesh = new CollisionMesh(ID + "_COLLISION_MESH", ID); - collisionMesh.GenerateCollisionMeshFromVulkanModel(modelData); - collisionMesh.RegisterMesh(); - return this; - } public Actor ResetRotation(){ Rotation.x = 0; @@ -197,7 +179,6 @@ public class Actor{ public Actor SetPosition(Vector3f position){ Position.set(position); UpdateModelMatrix(); - if(collisionMesh != null)collisionMesh.SetWorldPosition(Position); return this; } public Actor SetPosition(float x, float y, float z){ @@ -244,7 +225,6 @@ public class Actor{ rigidBody.Position.set(Position); this.Position.set(Position); UpdateModelMatrix(); - if(collisionMesh != null) collisionMesh.SetWorldPosition(this.Position); } private RigidBody GetRigidBody() { diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/ActorElement.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/ActorElement.java index 54f72e3..aec20fa 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/ActorElement.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/ActorElement.java @@ -1,16 +1,11 @@ package net.halbear.Terrain4J.EngineCore.Main.Scene; import net.halbear.Terrain4J.EngineCore.Logic.Physics.IPhysicsController; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyCollision.CollisionMesh; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyPhysicsController; import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.ConvexMesh; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidPhysicsController; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.ModelData; -import org.joml.Matrix4f; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.ModelData; import org.joml.Quaternionf; import org.joml.Vector3f; -import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -44,12 +39,6 @@ public class ActorElement extends Actor { public Actor CreatePhysicsController(ConvexMesh mesh, float Mass){ return this; } - @Override - - public Actor CreatePhysicsController(LegacyPhysicsController.CollisionType collisionType){ - return this; - } - @Override public Actor GenerateCollisionMesh(ModelData modelData) { return this; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Camera2D.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Camera2D.java index 9e21a94..71b27d7 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Camera2D.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Camera2D.java @@ -2,23 +2,35 @@ package net.halbear.Terrain4J.EngineCore.Main.Scene; import org.joml.Vector2f; +import java.util.HashMap; +import java.util.Map; + public class Camera2D { + public static final Map CameraRegistry = new HashMap<>(); + + private final Vector2f Position; private final Vector2f Rotation; private final Vector2f Scale; + private final String ID; - public Camera2D(Vector2f position, Vector2f rotation) { + public Camera2D(String ID,Vector2f position, Vector2f rotation) { + this.ID = ID; Position = position; Rotation = rotation; Scale = new Vector2f(1.0f, 1.0f); + CameraRegistry.put(ID, this); } - public Camera2D(){ + public Camera2D(String ID){ Position = new Vector2f(); + this.ID = ID; Rotation = new Vector2f(); Scale = new Vector2f(1.0f, 1.0f); + CameraRegistry.put(ID, this); } + public Vector2f GetScale() { return Scale; } @@ -41,6 +53,11 @@ public class Camera2D { return this; } + public Camera2D AddPosition(Vector2f offset) { + SetPosition(Position.add(offset)); + return this; + } + public Camera2D SetPosition(Vector2f position) { Position.set(position); return this; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/EditorActorComponent.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/EditorActorComponent.java index 6f80555..0d5b819 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/EditorActorComponent.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/EditorActorComponent.java @@ -32,11 +32,6 @@ public class EditorActorComponent implements IMoveableActorComponent{ @Override public void UpdateAll() { actor.GetPosition().set(Position.x,Position.y,Position.z); - if(actor.GetCollisionMesh() != null) { - actor.GetCollisionMesh().SetWorldPosition(new Vector3f(Position.x,Position.y,Position.z)); - actor.GetCollisionMesh().SetRotationTransform(actor.GetRotation()); - actor.GetCollisionMesh().SetScaleTransform(actor.GetScale()); - } ActorGimbal.SetPosition(new Vector3f(Position.x, Position.y, Position.z).add(actor.GetPivotOffset()).add(actor.GetAditionalPivotOffset())); } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/CreditsMenu.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/CreditsMenu.java index 59af30a..30aa33d 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/CreditsMenu.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/CreditsMenu.java @@ -1,6 +1,5 @@ package net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs; -import imgui.ImDrawList; import imgui.ImGui; import imgui.ImGuiViewport; import imgui.ImVec2; @@ -10,17 +9,9 @@ import imgui.flag.ImGuiStyleVar; import imgui.flag.ImGuiWindowFlags; import imgui.type.ImInt; import imgui.type.ImString; -import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; -import net.halbear.Terrain4J.EngineCore.Main.AudioInstance; import net.halbear.Terrain4J.EngineCore.Main.GameCore; -import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIOverlay; -import net.halbear.Terrain4J.EngineCore.Main.Scene.Scene; -import net.halbear.Terrain4J.EngineCore.Threads.ClientConnectionThread; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.DeferredSceneRender; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.ForwardSceneRender; -import org.tinylog.Logger; public class CreditsMenu implements GUIOverlay { public int[] Music = new int[]{100}; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/GameChat.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/GameChat.java new file mode 100644 index 0000000..839b4e1 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/GameChat.java @@ -0,0 +1,72 @@ +package net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs; + +import imgui.ImGui; +import imgui.flag.ImGuiChildFlags; +import imgui.flag.ImGuiCond; +import imgui.flag.ImGuiWindowFlags; +import imgui.type.ImFloat; +import imgui.type.ImString; +import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; +import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; +import net.halbear.Terrain4J.EngineCore.Main.GameCore; +import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; +import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIOverlay; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.DeferredSceneRender; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.ForwardSceneRender; +import net.halbear.Terrain4J.EngineCore.ServerNetworking.ClientSideNetworkUtils; +import net.halbear.Terrain4J.EngineCore.Threads.ClientConnectionThread; +import org.tinylog.Logger; + +import java.nio.CharBuffer; + +public class GameChat implements GUIOverlay { + public static final ImString ChatBuffer = new ImString(128); + public static boolean IsChatOpen = false; + private int LastChatCount = 0; + private static String CurrentChatMessage = ""; + public static String GetChatMessage(){ + return CurrentChatMessage; + } + + public static void SubmitChatMessage(){ + if(CurrentChatMessage.isBlank()) return; + ClientSideNetworkUtils.CreateGameChatPacket(CurrentChatMessage); + CurrentChatMessage = ""; + ChatBuffer.clear(); + IsChatOpen = false; + } + + @Override + public void RenderGUI(EngineInstance engineInstance, long frameTimeNS, GameCore parent) { + int windowFlags = ImGuiWindowFlags.NoDecoration + | ImGuiWindowFlags.AlwaysAutoResize + | ImGuiWindowFlags.NoSavedSettings + | ImGuiWindowFlags.NoFocusOnAppearing + | ImGuiWindowFlags.NoMove; + double FrameTimeMS = (frameTimeNS/1000000.0); + double AverageGPUTimeMS = EngineConfig.LAST_AVERAGE_GPU_TIME/1000000.0; + ImGui.setNextWindowPos(0,0, ImGuiCond.Always); + //ImGui.setNextWindowSize(300,100); + ImGui.begin("Game Chat",windowFlags); + float width = ImGui.getIO().getDisplaySizeX(); + ImGui.beginChild("ScrollingRegion", width/5, 200, ImGuiChildFlags.None, ImGuiWindowFlags.HorizontalScrollbar); + { + ClientSideNetworkUtils.GameChats.forEach((Log, Username ) -> { + ImGui.text((Log.FromServer() ? "" : Username +": ") + Log.message()); + }); + if(ClientSideNetworkUtils.GameChats.size() != LastChatCount){ + ImGui.setScrollHereY(1.0f); + LastChatCount = ClientSideNetworkUtils.GameChats.size(); + } + } + if(IsChatOpen){ + if (ImGui.inputText("Chat", ChatBuffer)) { + CurrentChatMessage = ChatBuffer.get(); + } + } else{ + ImGui.text("Press T to type in chat"); + } + ImGui.endChild(); + ImGui.end(); + } +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/Gimbal.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/Gimbal.java index 035abdf..e78cffe 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/Gimbal.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/Gimbal.java @@ -5,13 +5,8 @@ import imgui.ImGui; import imgui.ImVec2; import imgui.flag.ImGuiCol; import imgui.flag.ImGuiWindowFlags; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyCollision.CollisionManager; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyCollision.CollisionMesh; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyCollision.CollisionPoly; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.CollisionSensor; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyPhysicsController; import net.halbear.Terrain4J.EngineCore.Main.GameCore; import net.halbear.Terrain4J.EngineCore.Main.Scene.Actor; import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIOverlay; @@ -25,6 +20,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +@Deprecated public class Gimbal implements GUIOverlay { private IMoveableActorComponent parent; public static Map gimbalMap = new HashMap<>(); @@ -55,27 +51,6 @@ public class Gimbal implements GUIOverlay { ImGui.begin("WorldSpaceUIOverlay", flags); ImGui.getStyle().setAntiAliasedLines(true); - if(EngineConfig.getInstance().RenderCollisionMesh){ - List meshes = CollisionManager.GetAllCollisionMeshes(); - for(int i = 0; i < meshes.size(); i++){ - CollisionMesh mesh = meshes.get(i); - CollisionPoly[] polygons = mesh.GetAllPolygons(); - for(int j = 0; j < polygons.length; j++){ - DrawCollisionPolygon(engineInstance.scene().GetCamera().GetViewMatrix(), engineInstance.scene().GetProjection().GetProjectionMatrix(),winWidth,winHeight,polygons[j]); - } - if(mesh.ParentID != "NULL" && Actor.Actors.get(mesh.ParentID) != null) { - Actor actor = Actor.Actors.get(mesh.ParentID); - if(actor.PhysicsType == Actor.PhysicsControllerType.T4JLegacyCollision) { - LegacyPhysicsController physicsController = (LegacyPhysicsController) actor.GetPhysicsController(); - List RawCollisionSesnors = physicsController.collisionSensors; - // Vector3f[] CollisionSensors = new Vector3f[RawCollisionSesnors.size()]; - for (int j = 0; j < RawCollisionSesnors.size(); j++) { - DrawCollisionSensor(engineInstance.scene().GetCamera().GetViewMatrix(), engineInstance.scene().GetProjection().GetProjectionMatrix(), winWidth, winHeight, RawCollisionSesnors.get(j).GetTransformedCollisionSensor(), actor.GetPosition()); - } - } - } - } - } for(int i = 0; i < gimbals.size(); i++){ gimbals.get(i).DrawGimbalInWorld(engineInstance.scene().GetCamera().GetViewMatrix(), engineInstance.scene().GetProjection().GetProjectionMatrix(),winWidth,winHeight); } @@ -130,24 +105,24 @@ public class Gimbal implements GUIOverlay { drawList.addCircle(new ImVec2(v1.x,v1.y),6,colour,5f); } - public static void DrawCollisionPolygon(Matrix4f viewMatrix, Matrix4f projMatrix, int winWidth, int winHeight, CollisionPoly polygon){ - if(polygon == null || polygon.v1() == null || polygon.v2() == null || polygon.v3() == null) return; - Vector3f v1 = T4Math.Math3D.GetScreenCoordFromWorldSpace(polygon.v1(), viewMatrix, projMatrix, winWidth, winHeight); - Vector3f v2 = T4Math.Math3D.GetScreenCoordFromWorldSpace(polygon.v2(), viewMatrix, projMatrix, winWidth, winHeight); - Vector3f v3 = T4Math.Math3D.GetScreenCoordFromWorldSpace(polygon.v3(), viewMatrix, projMatrix, winWidth, winHeight); - if(v1 == null || v2 == null || v3 == null) return; - ImDrawList drawList = ImGui.getBackgroundDrawList(); - int colour = ImGui.getColorU32(0.0f, 0.0f, 0.0f, 1.0f); - drawList.addLine(v1.x, v1.y, v2.x, v2.y, colour, 1f); - drawList.addLine(v2.x, v2.y, v3.x, v3.y, colour, 1f); - drawList.addLine(v3.x, v3.y, v1.x, v1.y, colour, 1f); - colour = ImGui.getColorU32(0.0f, 0.4f, 1.0f, 0.1f); - drawList.addTriangleFilled( - new ImVec2(v1.x,v1.y), - new ImVec2(v2.x,v2.y), - new ImVec2(v3.x,v3.y) - ,colour); - } +// public static void DrawCollisionPolygon(Matrix4f viewMatrix, Matrix4f projMatrix, int winWidth, int winHeight, CollisionPoly polygon){ +// if(polygon == null || polygon.v1() == null || polygon.v2() == null || polygon.v3() == null) return; +// Vector3f v1 = T4Math.Math3D.GetScreenCoordFromWorldSpace(polygon.v1(), viewMatrix, projMatrix, winWidth, winHeight); +// Vector3f v2 = T4Math.Math3D.GetScreenCoordFromWorldSpace(polygon.v2(), viewMatrix, projMatrix, winWidth, winHeight); +// Vector3f v3 = T4Math.Math3D.GetScreenCoordFromWorldSpace(polygon.v3(), viewMatrix, projMatrix, winWidth, winHeight); +// if(v1 == null || v2 == null || v3 == null) return; +// ImDrawList drawList = ImGui.getBackgroundDrawList(); +// int colour = ImGui.getColorU32(0.0f, 0.0f, 0.0f, 1.0f); +// drawList.addLine(v1.x, v1.y, v2.x, v2.y, colour, 1f); +// drawList.addLine(v2.x, v2.y, v3.x, v3.y, colour, 1f); +// drawList.addLine(v3.x, v3.y, v1.x, v1.y, colour, 1f); +// colour = ImGui.getColorU32(0.0f, 0.4f, 1.0f, 0.1f); +// drawList.addTriangleFilled( +// new ImVec2(v1.x,v1.y), +// new ImVec2(v2.x,v2.y), +// new ImVec2(v3.x,v3.y) +// ,colour); +// } public void DrawGimbalInWorld(Matrix4f viewMatrix, Matrix4f projMatrix, int winWidth, int winHeight) { Vector3f CentrePoint = new Vector3f(Position); diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/LoadingScreen.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/LoadingScreen.java index fa792e4..4db15c2 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/LoadingScreen.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/LoadingScreen.java @@ -1,22 +1,16 @@ package net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs; -import imgui.ImDrawList; import imgui.ImGui; import imgui.ImGuiViewport; import imgui.flag.ImGuiCol; import imgui.flag.ImGuiCond; import imgui.flag.ImGuiWindowFlags; import imgui.type.ImFloat; -import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; import net.halbear.Terrain4J.EngineCore.Main.GameCore; import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIOverlay; -import net.halbear.Terrain4J.EngineCore.Vulkan.GUI.GuiTexture; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.DeferredSceneRender; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.ForwardSceneRender; -import org.joml.Vector3f; -import org.tinylog.Logger; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.GUI.GuiTexture; public class LoadingScreen implements GUIOverlay { private final ImFloat GammaValue = new ImFloat(0.8545f); diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/PerformanceOverlay.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/PerformanceOverlay.java index d5f8620..17cf2f0 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/PerformanceOverlay.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/PerformanceOverlay.java @@ -2,7 +2,6 @@ package net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs; import imgui.ImGui; import imgui.flag.ImGuiCond; -import imgui.flag.ImGuiInputTextFlags; import imgui.flag.ImGuiWindowFlags; import imgui.type.ImFloat; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; @@ -10,9 +9,8 @@ import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; import net.halbear.Terrain4J.EngineCore.Main.GameCore; import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIOverlay; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.DeferredSceneRender; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.ForwardSceneRender; -import org.joml.Vector3f; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.DeferredSceneRender; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.ForwardSceneRender; import org.tinylog.Logger; public class PerformanceOverlay implements GUIOverlay { @@ -39,6 +37,16 @@ public class PerformanceOverlay implements GUIOverlay { ImGui.separator(); ImGui.text("GRAPHICS SETTINGS:"); ImGui.text(" "); + ImGui.text("Rendering API:"); + if(ImGui.button("Vulkan")){ + Logger.debug("Switch to Vulkan"); + EngineConfig.getInstance().SetRenderingAPI(EngineConfig.RenderAPI.Vulkan); + } + ImGui.sameLine(); + if(ImGui.button("OpenGL")){ + Logger.debug("Switch to OpenGL"); + EngineConfig.getInstance().SetRenderingAPI(EngineConfig.RenderAPI.OpenGL); + } ImGui.text("Presets:"); if(ImGui.button("Lowest")){ parent.ChangeGraphicsSettings = true; @@ -47,7 +55,7 @@ public class PerformanceOverlay implements GUIOverlay { ForwardSceneRender.SetDualPassRendering(false); DeferredSceneRender.SetDualPassRendering(false); EngineConfig.getInstance().SetAlphaToCoverage(false); - PrimaryRuntime.GetRenderThread().GetRenderer().GetSceneRender().RebuildPipelines(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext()); + if(engineInstance.window().GetLinkedApi() == EngineConfig.RenderAPI.Vulkan)PrimaryRuntime.GetRenderThread().GetRenderer().GetSceneRender().RebuildPipelines(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext()); } ImGui.sameLine(); if(ImGui.button("Medium")){ @@ -57,7 +65,7 @@ public class PerformanceOverlay implements GUIOverlay { ForwardSceneRender.SetDualPassRendering(true); DeferredSceneRender.SetDualPassRendering(true); EngineConfig.getInstance().SetAlphaToCoverage(true); - PrimaryRuntime.GetRenderThread().GetRenderer().GetSceneRender().RebuildPipelines(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext()); + if(engineInstance.window().GetLinkedApi() == EngineConfig.RenderAPI.Vulkan)PrimaryRuntime.GetRenderThread().GetRenderer().GetSceneRender().RebuildPipelines(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext()); } ImGui.sameLine(); if(ImGui.button("Highest")){ @@ -67,7 +75,7 @@ public class PerformanceOverlay implements GUIOverlay { ForwardSceneRender.SetDualPassRendering(true); DeferredSceneRender.SetDualPassRendering(true); EngineConfig.getInstance().SetAlphaToCoverage(false); - PrimaryRuntime.GetRenderThread().GetRenderer().GetSceneRender().RebuildPipelines(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext()); + if(engineInstance.window().GetLinkedApi() == EngineConfig.RenderAPI.Vulkan)PrimaryRuntime.GetRenderThread().GetRenderer().GetSceneRender().RebuildPipelines(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext()); } ImGui.text(" "); ImGui.text("anti aliasing:"); @@ -132,14 +140,14 @@ public class PerformanceOverlay implements GUIOverlay { parent.ChangeGraphicsSettings = true; parent.CoolDown = 500; EngineConfig.getInstance().SetAlphaToCoverage(false); - PrimaryRuntime.GetRenderThread().GetRenderer().GetSceneRender().RebuildPipelines(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext()); + if(engineInstance.window().GetLinkedApi() == EngineConfig.RenderAPI.Vulkan)PrimaryRuntime.GetRenderThread().GetRenderer().GetSceneRender().RebuildPipelines(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext()); } ImGui.sameLine(); if(ImGui.button("AlphaToCoverage True")){ parent.ChangeGraphicsSettings = true; parent.CoolDown = 500; EngineConfig.getInstance().SetAlphaToCoverage(true); - PrimaryRuntime.GetRenderThread().GetRenderer().GetSceneRender().RebuildPipelines(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext()); + if(engineInstance.window().GetLinkedApi() == EngineConfig.RenderAPI.Vulkan) PrimaryRuntime.GetRenderThread().GetRenderer().GetSceneRender().RebuildPipelines(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext()); } ImGui.inputFloat("Gamma", GammaValue, 0.0025f, 0.22725f, "%.4f"); if (ImGui.isItemDeactivatedAfterEdit()) { diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/SettingsMenu.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/SettingsMenu.java index c39cc4c..fa043ff 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/SettingsMenu.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/SettingsMenu.java @@ -1,13 +1,7 @@ package net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs; -import imgui.ImDrawList; -import imgui.ImGui; -import imgui.ImGuiViewport; -import imgui.ImVec2; -import imgui.flag.ImGuiCol; -import imgui.flag.ImGuiCond; -import imgui.flag.ImGuiStyleVar; -import imgui.flag.ImGuiWindowFlags; +import imgui.*; +import imgui.flag.*; import imgui.type.ImInt; import imgui.type.ImString; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; @@ -17,9 +11,11 @@ import net.halbear.Terrain4J.EngineCore.Main.GameCore; import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIOverlay; import net.halbear.Terrain4J.EngineCore.Main.Scene.Scene; +import net.halbear.Terrain4J.EngineCore.ServerNetworking.ClientSideNetworkUtils; import net.halbear.Terrain4J.EngineCore.Threads.ClientConnectionThread; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.DeferredSceneRender; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.ForwardSceneRender; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.DeferredSceneRender; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.ForwardSceneRender; +import org.lwjgl.glfw.GLFW; import org.tinylog.Logger; public class SettingsMenu implements GUIOverlay { @@ -31,6 +27,19 @@ public class SettingsMenu implements GUIOverlay { public final ImString textBuffer = new ImString(100); public final ImString UsernameBuffer = new ImString(24); + public SettingsMenu(){ + textBuffer.set(EngineConfig.getInstance().GetServerIP()); + ServerPort.set(EngineConfig.getInstance().GetServerPort()); + UsernameBuffer.set(EngineConfig.getInstance().GetUserDisplayName()); + Music[0] = (int)(EngineConfig.getInstance().MusicVolume * 100); + SFX[0] = (int)(EngineConfig.getInstance().SoundVolume * 100); + Weapons[0] = (int)(EngineConfig.getInstance().WeaponVolume * 100); + Ambient[0] = (int)(EngineConfig.getInstance().AmbientVolume * 100); + AudioInstance.ApplyUniversalVolume(); + + + } + @Override public void RenderGUI(EngineInstance engineInstance, long frameTimeNS, GameCore parent) { if (!StartMenu.ShowSettings) return; @@ -39,7 +48,6 @@ public class SettingsMenu implements GUIOverlay { | ImGuiWindowFlags.AlwaysAutoResize | ImGuiWindowFlags.NoSavedSettings | ImGuiWindowFlags.NoFocusOnAppearing - | ImGuiWindowFlags.NoNav | ImGuiWindowFlags.NoMove; float CenterX = viewport.getWorkPosX() + viewport.getWorkSizeX() / 2.0f; @@ -52,6 +60,7 @@ public class SettingsMenu implements GUIOverlay { ImGui.pushStyleVar(ImGuiStyleVar.WindowRounding, 8f); ImGui.begin("Start Menu", menuFlags); + ImGuiIO io = ImGui.getIO(); ImDrawList drawList = ImGui.getForegroundDrawList(); ImGui.setWindowFontScale(4.0f); if (ImGui.button("Return")) { @@ -67,8 +76,8 @@ public class SettingsMenu implements GUIOverlay { StartMenu.GameStarted = false; } ImGui.sameLine(); - int color = ImGui.getColorU32(ClientConnectionThread.Connected ? 0.0f : 1.0f, ClientConnectionThread.Connected ? 1.0f : 0.0f, 0.0f, 1.0f); - String text = ClientConnectionThread.Connected ? "ONLINE" : "OFFLINE"; + int color = ImGui.getColorU32(ClientSideNetworkUtils.Connected ? 0.0f : 1.0f, ClientSideNetworkUtils.Connected ? 1.0f : 0.0f, 0.0f, 1.0f); + String text = ClientSideNetworkUtils.Connected ? "ONLINE" : "OFFLINE"; float rightEdge = ImGui.getMainViewport().getPos().x + ImGui.getMainViewport().getSize().x; ImVec2 textSize = new ImVec2(); ImGui.calcTextSize(textSize, text); @@ -92,19 +101,21 @@ public class SettingsMenu implements GUIOverlay { ImGui.setWindowFontScale(3f); ImGui.text("User Configuration"); if (ImGui.inputText("Player Username", UsernameBuffer)) { - + EngineConfig.getInstance().SetUserDisplayName(UsernameBuffer.get()); } ImGui.text("Server Configuration"); if (ImGui.inputText("Server IP Address", textBuffer)) { - ClientConnectionThread.ServerIP = textBuffer.get(); + ClientSideNetworkUtils.ServerIP = textBuffer.get(); } if (ImGui.inputInt("Server Port", ServerPort)) { - ClientConnectionThread.ServerPort = ServerPort.get(); + ClientSideNetworkUtils.ServerPort = ServerPort.get(); } - ImGui.text("Players Online: " + (ClientConnectionThread.Connected ? ClientConnectionThread.PlayersOnline : "Not Connected to Server")); - ImGui.text("Client UUID: " + (ClientConnectionThread.Connected ? ClientConnectionThread.clientUUID : "Not Connected to Server")); + ImGui.text("Players Online: " + (ClientSideNetworkUtils.Connected ? ClientSideNetworkUtils.PlayersOnline : "Not Connected to Server")); + ImGui.text("Client UUID: " + (ClientSideNetworkUtils.Connected ? ClientSideNetworkUtils.clientUUID : "Not Connected to Server")); if (ImGui.button("Apply and reconnect")) { - + EngineConfig.getInstance().SetServerIP(ClientSideNetworkUtils.ServerIP); + EngineConfig.getInstance().SetServerPort(ClientSideNetworkUtils.ServerPort); + ClientSideNetworkUtils.Reconnect(); } ImGui.endTabItem(); } @@ -169,6 +180,17 @@ public class SettingsMenu implements GUIOverlay { ImGui.setWindowFontScale(4.0f); ImGui.text("Graphics Settings"); ImGui.setWindowFontScale(3f); + ImGui.text("Rendering API:"); + ImGui.text("Active Renderer: " + EngineConfig.getInstance().GetRenderingAPI().name()); + if(ImGui.button("Vulkan")){ + Logger.debug("Switch to Vulkan"); + EngineConfig.getInstance().SetRenderingAPI(EngineConfig.RenderAPI.Vulkan); + } + ImGui.sameLine(); + if(ImGui.button("OpenGL")){ + Logger.debug("Switch to OpenGL"); + EngineConfig.getInstance().SetRenderingAPI(EngineConfig.RenderAPI.OpenGL); + } ImGui.text("Presets:"); if(ImGui.button("Lowest")){ parent.ChangeGraphicsSettings = true; @@ -177,7 +199,7 @@ public class SettingsMenu implements GUIOverlay { ForwardSceneRender.SetDualPassRendering(false); DeferredSceneRender.SetDualPassRendering(false); EngineConfig.getInstance().SetAlphaToCoverage(false); - PrimaryRuntime.GetRenderThread().GetRenderer().GetSceneRender().RebuildPipelines(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext()); + if(engineInstance.window().GetLinkedApi() == EngineConfig.RenderAPI.Vulkan)PrimaryRuntime.GetRenderThread().GetRenderer().GetSceneRender().RebuildPipelines(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext()); } ImGui.sameLine(); if(ImGui.button("Medium")){ @@ -187,7 +209,7 @@ public class SettingsMenu implements GUIOverlay { ForwardSceneRender.SetDualPassRendering(true); DeferredSceneRender.SetDualPassRendering(true); EngineConfig.getInstance().SetAlphaToCoverage(true); - PrimaryRuntime.GetRenderThread().GetRenderer().GetSceneRender().RebuildPipelines(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext()); + if(engineInstance.window().GetLinkedApi() == EngineConfig.RenderAPI.Vulkan)PrimaryRuntime.GetRenderThread().GetRenderer().GetSceneRender().RebuildPipelines(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext()); } ImGui.sameLine(); if(ImGui.button("Highest")){ @@ -197,9 +219,10 @@ public class SettingsMenu implements GUIOverlay { ForwardSceneRender.SetDualPassRendering(true); DeferredSceneRender.SetDualPassRendering(true); EngineConfig.getInstance().SetAlphaToCoverage(false); - PrimaryRuntime.GetRenderThread().GetRenderer().GetSceneRender().RebuildPipelines(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext()); + if(engineInstance.window().GetLinkedApi() == EngineConfig.RenderAPI.Vulkan)PrimaryRuntime.GetRenderThread().GetRenderer().GetSceneRender().RebuildPipelines(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext()); } ImGui.text("anti aliasing:"); + ImGui.text("Selected AA: " + EngineConfig.getInstance().RenderAAType().name()); if(ImGui.button("No AA")){ parent.ChangeGraphicsSettings = true; parent.CoolDown = 2000; @@ -230,6 +253,7 @@ public class SettingsMenu implements GUIOverlay { parent.NextAAMode = 4; } ImGui.text("pipeline:"); + ImGui.text("Selected Pass mode: " + (DeferredSceneRender.DualPassRendering() ? "Dual Pass" : "Single pass")); if(ImGui.button("Single Pass")){ parent.ChangeGraphicsSettings = true; parent.CoolDown = 500; @@ -244,6 +268,7 @@ public class SettingsMenu implements GUIOverlay { DeferredSceneRender.SetDualPassRendering(true); } ImGui.text("pipeline lighting method:"); + ImGui.text("Selected Lighting: " + (EngineConfig.getInstance().DeferredRendering() ? "Deferred" : "Forward")); if(ImGui.button("No Lighting")){ parent.ChangeGraphicsSettings = true; parent.CoolDown = 500; @@ -259,18 +284,19 @@ public class SettingsMenu implements GUIOverlay { // PrimaryRuntime.GetRenderThread().RefreshRenderer(); } ImGui.text("Translucency rendering method:"); + ImGui.text("Selected Translucency: " + (EngineConfig.getInstance().DeferredRendering() ? "Blend Alpha" : "Dither Alpha")); if(ImGui.button("Alpha Blending (translucency)")){ parent.ChangeGraphicsSettings = true; parent.CoolDown = 500; EngineConfig.getInstance().SetAlphaToCoverage(false); - PrimaryRuntime.GetRenderThread().GetRenderer().GetSceneRender().RebuildPipelines(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext()); + if(engineInstance.window().GetLinkedApi() == EngineConfig.RenderAPI.Vulkan)PrimaryRuntime.GetRenderThread().GetRenderer().GetSceneRender().RebuildPipelines(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext()); } ImGui.sameLine(); if(ImGui.button("Alpha To Coverage (Dithering)")){ parent.ChangeGraphicsSettings = true; parent.CoolDown = 500; EngineConfig.getInstance().SetAlphaToCoverage(true); - PrimaryRuntime.GetRenderThread().GetRenderer().GetSceneRender().RebuildPipelines(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext()); + if(engineInstance.window().GetLinkedApi() == EngineConfig.RenderAPI.Vulkan)PrimaryRuntime.GetRenderThread().GetRenderer().GetSceneRender().RebuildPipelines(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext()); } ImGui.endTabItem(); } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/StartMenu.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/StartMenu.java index 1030f5f..3b750d7 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/StartMenu.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/GUIs/StartMenu.java @@ -1,25 +1,16 @@ package net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs; -import imgui.ImDrawList; import imgui.ImGui; import imgui.ImGuiViewport; import imgui.flag.ImGuiCol; import imgui.flag.ImGuiCond; import imgui.flag.ImGuiStyleVar; import imgui.flag.ImGuiWindowFlags; -import imgui.type.ImFloat; -import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; import net.halbear.Terrain4J.EngineCore.Main.GameCore; -import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIOverlay; -import net.halbear.Terrain4J.EngineCore.Vulkan.GUI.GuiTexture; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.DeferredSceneRender; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.ForwardSceneRender; import net.halbear.Terrain4J.EngineCore.Main.AudioInstance; import net.halbear.Terrain4J.EngineCore.Main.Scene.Scene; -import org.joml.Vector3f; -import org.tinylog.Logger; public class StartMenu implements GUIOverlay { public static boolean GameStarted = false; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/IScene.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/IScene.java index 38940dd..ab2c1b5 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/IScene.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/IScene.java @@ -3,19 +3,21 @@ package net.halbear.Terrain4J.EngineCore.Main.Scene; import net.halbear.Terrain4J.EngineCore.Audio.AudioManager; import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.SkyBox; +import net.halbear.Terrain4J.EngineCore.Main.AudioInstance; import net.halbear.Terrain4J.EngineCore.Main.GameCore; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.DynamicMesh.DynamicTerrainMesh; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Projection.Project3D; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.DynamicMesh.DynamicTerrainMesh; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Projection.Project3D; import java.util.List; import java.util.Map; +import java.util.Queue; public interface IScene { public void CameraTick(long FrameDiffNanoSeconds); public Map GetCameraFrameReg(); public CameraFrame GetCameraFrame(String Name); - public Scene AddCameraFrame(String Name, CameraFrame frame); + public IScene AddCameraFrame(String Name, CameraFrame frame); public void StartCameraTrack(String StartFrame, String EndFrame, int TickAmount); public void SetActiveCameraFrame(String frameName); public Camera GetCamera(); @@ -25,6 +27,7 @@ public interface IScene { public void RemoveAllActors(); public Actor RemoveActor(Actor actor); public void Input(EngineInstance engineInstance, long FrameDiffNanoSeconds, PlayerActor playerActor, float MOVEMENT_SPEED,GameCore parent); + public void GlobalInput(EngineInstance engineInstance, long FrameDiffNanoSeconds, PlayerActor playerActor, float MOVEMENT_SPEED,GameCore parent); public void Update(EngineInstance engineInstance, long FrameDiffNanoSeconds); public void UpdateFastThread(EngineInstance engineInstance, long FrameDiffNanoSeconds); public void SecondUpdate(EngineInstance engineInstance); @@ -40,4 +43,7 @@ public interface IScene { public void CreateTerrainMesh(); public List GetSprites(); public Camera2D Get2DCamera(); + public Map audioInstances(); + public void Reset(); + public Queue NetworkedActors(); } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/PlayerActor.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/PlayerActor.java index aa011fb..13cc160 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/PlayerActor.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/PlayerActor.java @@ -1,13 +1,12 @@ package net.halbear.Terrain4J.EngineCore.Main.Scene; -import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.ConvexMesh; import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidBody; import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidPhysicsController; import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; +import net.halbear.Terrain4J.EngineCore.ServerNetworking.ClientSideNetworkUtils; import net.halbear.Terrain4J.EngineCore.Threads.ClientConnectionThread; import net.halbear.Terrain4J.EngineCore.Threads.RenderThread; -import org.joml.Quaternionf; import org.joml.Vector3f; import org.tinylog.Logger; @@ -25,7 +24,7 @@ public class PlayerActor extends Actor{ this.AttachedCameraID = AttachedCameraID; PlayerCam = Camera.CameraRegistry.get(AttachedCameraID); super(ID, ModelID, Position); - if(!Objects.equals(ClientConnectionThread.OwnedActorID, ID) && !RenderThread.Headless && !PrimaryRuntime.Server){ + if(!ClientSideNetworkUtils.OwnsActor(ID) && !RenderThread.Headless && !PrimaryRuntime.IsServer){ ActorElement newMelona = new ActorElement("PlayerModel" + ID, MelonaModelID, ID,new Vector3f(0,0,0)); newMelona.SetScale(1.3f); newMelona.SetPositionOffset(0,-0.85f,0); @@ -84,10 +83,10 @@ public class PlayerActor extends Actor{ Position.add(CameraOffset); PlayerCam.SetPosition(Position.x, Position.y, Position.z); - if(!PrimaryRuntime.Server - && ClientConnectionThread.Connected - && GetID().equals(ClientConnectionThread.OwnedActorID)) { - ClientConnectionThread.SendEntityUpdatePacket(this); + if(!PrimaryRuntime.IsServer + && ClientSideNetworkUtils.Connected + && ClientSideNetworkUtils.OwnsActor(GetID())) { + ClientSideNetworkUtils.SendEntityUpdatePacket(this); } } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Scene.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Scene.java index 414b8c1..9013e11 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Scene.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Scene.java @@ -6,36 +6,29 @@ import net.halbear.Terrain4J.EngineCore.Input.KeyboardInput; import net.halbear.Terrain4J.EngineCore.Input.MouseListener; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidBody; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidPhysicsController; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.SkyBox; import net.halbear.Terrain4J.EngineCore.Main.AudioInstance; import net.halbear.Terrain4J.EngineCore.Main.GameCore; import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; +import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs.GameChat; import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs.Gimbal; import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs.PerformanceOverlay; import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs.StartMenu; import net.halbear.Terrain4J.EngineCore.Threads.ClientConnectionThread; import net.halbear.Terrain4J.EngineCore.Threads.RenderThread; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.DynamicMesh.DynamicTerrainMesh; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Projection.Project3D; -import net.halbear.Terrain4J.EngineCore.Main.Scene.Item; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.DynamicMesh.DynamicTerrainMesh; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Projection.Project3D; import net.halbear.Terrain4J.EngineCore.Main.AudioInstance.AudioType; import org.joml.Vector2f; import org.joml.Vector3f; -import org.tinylog.Logger; import java.util.*; +import java.util.concurrent.ConcurrentLinkedQueue; -import static net.halbear.Terrain4J.EngineCore.Threads.ClientConnectionThread.UpdateEntityModelID; +import static net.halbear.Terrain4J.EngineCore.ServerNetworking.ClientSideNetworkUtils.*; import static org.lwjgl.glfw.GLFW.*; import static org.lwjgl.glfw.GLFW.GLFW_KEY_A; import static org.lwjgl.glfw.GLFW.GLFW_KEY_D; -import static org.lwjgl.glfw.GLFW.GLFW_KEY_LEFT_CONTROL; -import static org.lwjgl.glfw.GLFW.GLFW_KEY_LEFT_SHIFT; -import static org.lwjgl.glfw.GLFW.GLFW_KEY_S; -import static org.lwjgl.glfw.GLFW.GLFW_KEY_SPACE; -import static org.lwjgl.glfw.GLFW.GLFW_KEY_W; public class Scene implements IScene { @@ -45,6 +38,7 @@ public class Scene implements IScene { private final Map Actors; private final List ActiveActors; + private final Queue NetworkedActors = new ConcurrentLinkedQueue<>(); private final Camera2D camera2D; private final Map Sprites; @@ -95,7 +89,10 @@ public class Scene implements IScene { public DynamicTerrainMesh GetTerrainMesh() { return terrainMesh; } - + @Override + public Map audioInstances() { + return audioInstances; + } @Override public void CreateTerrainMesh() { int Width = 32; @@ -143,7 +140,7 @@ public class Scene implements IScene { ActiveSprites = new ArrayList<>(); CameraFrames = new HashMap<>(); var EngConfig = EngineConfig.getInstance(); - camera2D = new Camera2D(); + camera2D = new Camera2D("DebugCamera"); camera = new Camera("DebugCamera"); LastCameraFrame = new CameraFrame(camera.GetPosition(),camera.GetRotation(),camera.GetFOV(), "NO_FRAME"); @@ -153,9 +150,11 @@ public class Scene implements IScene { Projection = new Project3D(camera.GetFOV(),EngConfig.GetZNearPlane(), EngConfig.GetZFarPlane(), projectionWidth, projectionHeight); - if(!PrimaryRuntime.Server && !RenderThread.Headless) { + if(!PrimaryRuntime.IsServer && !RenderThread.Headless) { GUIReg.put("PerformanceOverlay",new PerformanceOverlay()); - ActiveGUIs.add("PerformanceOverlay"); + // ActiveGUIs.add("PerformanceOverlay"); + GUIReg.put("ChatLog",new GameChat()); + ActiveGUIs.add("ChatLog"); } } public ISceneLightingManager GetLightingManager(){return lightingManager;} @@ -207,6 +206,18 @@ public class Scene implements IScene { } } + public void Reset(){ + Actor actor; + while((actor = Actors.get(NetworkedActors.poll())) != null) { + RemoveActor(actor); + } + } + + @Override + public Queue NetworkedActors() { + return NetworkedActors; + } + public Map GetCameraFrameReg(){return CameraFrames;} public CameraFrame GetCameraFrame(String Name){return CameraFrames.get(Name);} public Scene AddCameraFrame(String Name, CameraFrame frame){ @@ -224,7 +235,7 @@ public class Scene implements IScene { @Override public void SetUpAudio(EngineInstance engineInstance, AudioManager manager) { - if(RenderThread.Headless || PrimaryRuntime.Server) return; + if(RenderThread.Headless || PrimaryRuntime.IsServer) return; AudioInstance newInstance = new AudioInstance("resources/EngineResources/audio/music/MENUMUSIC_RetroFutureClean.ogg","BGM",manager,true); newInstance.Play(); audioInstances.put("BGM",newInstance); @@ -306,79 +317,109 @@ public class Scene implements IScene { if(input.keySinglePress(GLFW_KEY_F3)){ GUI_MODE = (GUI_MODE + 1) % 2; } - if(input.keyPressed(GLFW_KEY_ENTER)) { - parent.SpawnNewActor(engineInstance, new Vector3f( (float)(5 * Math.random()),20 + (float)(10 * Math.random()), (float)(5 * Math.random())),new Vector3f(-1f + (float)(2 * Math.random()),-1f + (float)(2 * Math.random()),-1f + (float)(2 * Math.random())),new Vector3f((float)Math.random(),(float)Math.random(),(float)Math.random())); - } - if(!RenderThread.Headless && !PrimaryRuntime.Server && playerActor!= null) { - if (input.keySinglePress(GLFW_KEY_M)) { - playerActor.SetModelID(MusketItem.ModelID()); - UpdateEntityModelID(playerActor.ID, MusketItem.ModelID()); - CurrentItem= MusketItem; - GunCockSFX.Play(); + if(GameChat.IsChatOpen){ + if(input.keyPressed(GLFW_KEY_ENTER)){ + GameChat.IsChatOpen = false; + GameChat.SubmitChatMessage(); } - if (input.keySinglePress(GLFW_KEY_R)) { - playerActor.SetModelID(RevolverItem.ModelID()); - UpdateEntityModelID(playerActor.ID, RevolverItem.ModelID()); - CurrentItem= RevolverItem; - GunCockSFX.Play(); - } - if (input.keySinglePress(GLFW_KEY_F)) { - playerActor.SetModelID(FlintLockItem.ModelID()); - UpdateEntityModelID(playerActor.ID, FlintLockItem.ModelID()); - CurrentItem= FlintLockItem; - GunCockSFX.Play(); + if(input.keyPressed(GLFW_KEY_ESCAPE)){ + GameChat.IsChatOpen = false; + GameChat.ChatBuffer.clear(); } } - if (input.keySinglePress(GLFW_KEY_ESCAPE)) { - parent.StartMenuActive = true; - parent.startMenu.GameStarted = true; - StartMenu.ShowSettings = true; - parent.SwitchBGM(engineInstance, this, "resources/EngineResources/audio/music/MENUMUSIC_RetroFutureClean.ogg"); - } - MouseListener mouseListener = window.getMouseInput(); - if (mouseListener.isRightButtonPressed()) { - CurrentWeapon.SetPositionOffset(new Vector3f(0f,1.15f,-1.25f)); - } else { - CurrentWeapon.SetPositionOffset(new Vector3f(0.5f,1.15f,-1.25f)); - } - if(mouseListener.isLeftButtonPressed()) { - if (CurrentItem != null&& playerActor != null) { - long NewTime = System.nanoTime(); - float FireRate = 1000f/CurrentItem.FireRate(); - if (NewTime - LastGunFire > 1_000_000f * FireRate ){ - LastGunFire = NewTime; - ClientConnectionThread.FireWeapon(playerActor.PositionOffset, CurrentItem.Damage(), 100, camera, playerActor.ID); - // MusketFireSFX.Play(); + if(!GameChat.IsChatOpen){ + if(input.keyPressed(GLFW_KEY_T)){ + GameChat.IsChatOpen = true; + } + if(!RenderThread.Headless && !PrimaryRuntime.IsServer && playerActor!= null) { + if (input.keySinglePress(GLFW_KEY_M)) { + playerActor.SetModelID(MusketItem.ModelID()); + UpdateEntityModelID(playerActor.ID, MusketItem.ModelID()); + CurrentItem= MusketItem; + GunCockSFX.Play(); + } + if (input.keySinglePress(GLFW_KEY_R)) { + playerActor.SetModelID(RevolverItem.ModelID()); + UpdateEntityModelID(playerActor.ID, RevolverItem.ModelID()); + CurrentItem= RevolverItem; + GunCockSFX.Play(); + } + if (input.keySinglePress(GLFW_KEY_F)) { + playerActor.SetModelID(FlintLockItem.ModelID()); + UpdateEntityModelID(playerActor.ID, FlintLockItem.ModelID()); + CurrentItem= FlintLockItem; + GunCockSFX.Play(); } } - } - if(input.keyPressed(GLFW_KEY_1)) { - Gimbal.universalType = Gimbal.GimbalType.Move; - } - if(input.keyPressed(GLFW_KEY_2)) { - Gimbal.universalType = Gimbal.GimbalType.Resize; - } - if(input.keyPressed(GLFW_KEY_3)) { - Gimbal.universalType = Gimbal.GimbalType.Rotate; - } - if(input.keyPressed(GLFW_KEY_TAB)){ - for(int i = 0; i < parent.ActorEditorComponents.size(); i++){ - parent.ActorEditorComponents.get(i).UpdateAll(); + MouseListener mouseListener = window.getMouseInput(); + if(!parent.StartMenuActive && !StartMenu.ShowSettings && !StartMenu.ShowCredits ) { + if (mouseListener.isRightButtonPressed()) { + CurrentWeapon.SetPositionOffset(new Vector3f(0f, 1.15f, -1.25f)); + } else { + CurrentWeapon.SetPositionOffset(new Vector3f(0.5f, 1.15f, -1.25f)); + } + if (mouseListener.isLeftButtonPressed()) { + if (CurrentItem != null && playerActor != null) { + long NewTime = System.nanoTime(); + float FireRate = 1000f / CurrentItem.FireRate(); + if (NewTime - LastGunFire > 1_000_000f * FireRate) { + LastGunFire = NewTime; + FireWeapon(playerActor.PositionOffset, CurrentItem.Damage(), 100, camera, playerActor.ID); + // MusketFireSFX.Play(); + } + } + } + if (input.keyPressed(GLFW_KEY_1)) { + Gimbal.universalType = Gimbal.GimbalType.Move; + } + if (input.keyPressed(GLFW_KEY_2)) { + Gimbal.universalType = Gimbal.GimbalType.Resize; + } + if (input.keyPressed(GLFW_KEY_3)) { + Gimbal.universalType = Gimbal.GimbalType.Rotate; + } + if (input.keyPressed(GLFW_KEY_TAB)) { + for (int i = 0; i < parent.ActorEditorComponents.size(); i++) { + parent.ActorEditorComponents.get(i).UpdateAll(); + } + } + if (input.keySinglePress(GLFW_KEY_F2)) { + EngineConfig.getInstance().SetRenderCollisionMesh(!EngineConfig.getInstance().RenderCollisionMeshes()); + } + + if (playerActor == null || CurrentWeapon == null || playerController == null) { + return; + } + + playerController.GetControls().Input(input, FrameDiffNanoSeconds, CurrentWeapon, MOVEMENT_SPEED, parent, this); } } - if(input.keySinglePress(GLFW_KEY_F2)) { - EngineConfig.getInstance().SetRenderCollisionMesh(!EngineConfig.getInstance().RenderCollisionMeshes()); - } - - if(playerActor == null || CurrentWeapon == null || playerController == null) { - return; - } - - playerController.GetControls().Input(input, FrameDiffNanoSeconds, CurrentWeapon, MOVEMENT_SPEED, parent, this); if(GUI_MODE == 0 && !ActiveGUIs.contains("PerformanceOverlay")) ActiveGUIs.add("PerformanceOverlay"); else if (GUI_MODE != 0) ActiveGUIs.remove("PerformanceOverlay"); } + @Override + public void GlobalInput(EngineInstance engineInstance, long FrameDiffNanoSeconds, PlayerActor playerActor, float MOVEMENT_SPEED, GameCore parent) { + IScene scene = engineInstance.scene(); + Window window = engineInstance.window(); + + KeyboardInput input = window.getKeyboardInput(); + float MovementDist = (float)(FrameDiffNanoSeconds / 1000000L) * MOVEMENT_SPEED; + if(input.keyPressed(GLFW_KEY_D)) { + scene.Get2DCamera().AddPosition(new Vector2f(1,0)); + } + if(input.keyPressed(GLFW_KEY_A)) { + scene.Get2DCamera().AddPosition(new Vector2f(-1,0)); + } + + if (input.keySinglePress(GLFW_KEY_ESCAPE)) { + parent.StartMenuActive = !parent.StartMenuActive; + StartMenu.GameStarted = parent.StartMenuActive; + StartMenu.ShowSettings = parent.StartMenuActive; + parent.SwitchBGM(engineInstance, this, "resources/EngineResources/audio/music/MENUMUSIC_RetroFutureClean.ogg"); + } + } + @Override public void Update(EngineInstance engineInstance, long FrameDiffNanoSeconds) { @@ -428,10 +469,10 @@ public class Scene implements IScene { } LastMousePos.x = CurrentMousePos.x; LastMousePos.y = CurrentMousePos.y; - // if(MouseInput.isRightButtonPressed()){ + // if(MouseInput.isRightButtonPressed()){ - camera.AddRotation((float)Math.toRadians(-deltaPos.y * Multiplier),(float)Math.toRadians(-deltaPos.x * Multiplier),0); - // } + camera.AddRotation((float)Math.toRadians(-deltaPos.y * Multiplier),(float)Math.toRadians(-deltaPos.x * Multiplier),0); + // } engineInstance.audioManager().UpdateListenerPosition(camera); } } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Scene2D.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Scene2D.java new file mode 100644 index 0000000..4050a77 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Scene2D.java @@ -0,0 +1,234 @@ +package net.halbear.Terrain4J.EngineCore.Main.Scene; + +import net.halbear.Terrain4J.EngineCore.Audio.AudioManager; +import net.halbear.Terrain4J.EngineCore.Display.Window; +import net.halbear.Terrain4J.EngineCore.Input.KeyboardInput; +import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; +import net.halbear.Terrain4J.EngineCore.Logic.Rendering.SkyBox; +import net.halbear.Terrain4J.EngineCore.Main.AudioInstance; +import net.halbear.Terrain4J.EngineCore.Main.GameCore; +import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; +import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs.StartMenu; +import net.halbear.Terrain4J.EngineCore.Threads.RenderThread; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.DynamicMesh.DynamicTerrainMesh; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Projection.Project3D; +import org.joml.Vector2f; + +import java.util.*; + +import static org.lwjgl.glfw.GLFW.*; + +public class Scene2D implements IScene{ + + public List ActiveGUIs = new ArrayList<>(); + public Map GUIReg = new HashMap<>(); + private final Camera2D camera2D; + private final Map UnsortedSprites; + private final List ActiveSprites; + + public int TotalTransitionTicks = 1000; + public float CurrentTransitionTick = 0; + private Vector2f LastMousePos = new Vector2f(0,0); + public Map audioInstances; + public IPlayerController playerController; + public int Jumps = 0; + public final int MaxJumps = 2; + public int GroundedGraceTicks = 0; + public final int MaxGroundedGraceTicks = 8; + public String CurrentCam = "DefaultCamera"; + + public Scene2D() + { + UnsortedSprites = new HashMap<>(); + ActiveSprites = new ArrayList<>(); + audioInstances = new HashMap<>(); + camera2D = new Camera2D("DefaultCamera"); + } + + @Override + public void CameraTick(long FrameDiffNanoSeconds) { + + } + + @Override + public Map GetCameraFrameReg() { + return Map.of(); + } + + @Override + public CameraFrame GetCameraFrame(String Name) { + return null; + } + + @Override + public IScene AddCameraFrame(String Name, CameraFrame frame) { + return this; + } + + @Override + public void StartCameraTrack(String StartFrame, String EndFrame, int TickAmount) { + + } + + @Override + public void SetActiveCameraFrame(String frameName) { + + } + + @Override + public Camera GetCamera() { + return null; + } + + @Override + public void AddActor(Actor NewActor) { + + } + + @Override + public List GetActors() { + return List.of(); + } + + @Override + public Project3D GetProjection() { + return null; + } + + @Override + public void RemoveAllActors() { + + } + + @Override + public Actor RemoveActor(Actor actor) { + return null; + } + + @Override + public void Input(EngineInstance engineInstance, long FrameDiffNanoSeconds, PlayerActor playerActor, float MOVEMENT_SPEED, GameCore parent) { + + } + + @Override + public void GlobalInput(EngineInstance engineInstance, long FrameDiffNanoSeconds, PlayerActor playerActor, float MOVEMENT_SPEED, GameCore parent) { + IScene scene = engineInstance.scene(); + Window window = engineInstance.window(); + + KeyboardInput input = window.getKeyboardInput(); + + if (input.keySinglePress(GLFW_KEY_ESCAPE)) { + parent.StartMenuActive = !parent.StartMenuActive; + StartMenu.GameStarted = parent.StartMenuActive; + StartMenu.ShowSettings = parent.StartMenuActive; + parent.SwitchBGM(engineInstance, this, "resources/EngineResources/audio/music/MENUMUSIC_RetroFutureClean.ogg"); + } + } + + + @Override + public void Update(EngineInstance engineInstance, long FrameDiffNanoSeconds) { + + } + + @Override + public void UpdateFastThread(EngineInstance engineInstance, long FrameDiffNanoSeconds) { + + } + + @Override + public void SecondUpdate(EngineInstance engineInstance) { + + } + + @Override + public void RenderThreadInput(EngineInstance engineInstance, long FrameDiffNanoSeconds) { + + } + + @Override + public void RenderGUIs(EngineInstance engineInstance, long frameTimeNS, GameCore parent) { + + } + + @Override + public void CameraInput(EngineInstance engineInstance, long FrameDiffNanoSeconds) { + + } + + @Override + public String GetActiveCameraFrame() { + return ""; + } + + @Override + public void SetUpAudio(EngineInstance engineInstance, AudioManager manager) { + if(RenderThread.Headless || PrimaryRuntime.IsServer) return; + AudioInstance newInstance = new AudioInstance("resources/EngineResources/audio/music/MENUMUSIC_RetroFutureClean.ogg","BGM",manager,true); + newInstance.Play(); + audioInstances.put("BGM",newInstance); + } + + @Override + public ISceneLightingManager GetLightingManager() { + return null; + } + + @Override + public SkyBox GetSkyBox() { + return null; + } + + @Override + public void SetSkyBox(SkyBox skyBox) { + + } + + @Override + public DynamicTerrainMesh GetTerrainMesh() { + return null; + } + + @Override + public void CreateTerrainMesh() { + + } + + @Override + public List GetSprites() { + List actors = new ArrayList<>(); + for(int i = 0; i < ActiveSprites.size(); i++){ + actors.add(UnsortedSprites.get(ActiveSprites.get(i))); + } + return actors; + } + + public void AddUnsortedSprite(Sprite NewActor){ + if(NewActor == null) return; + + UnsortedSprites.put(NewActor.GetID(), NewActor); + + if(!ActiveSprites.contains(NewActor.GetID())) { + ActiveSprites.add(NewActor.GetID()); + } + } + @Override + public Camera2D Get2DCamera() { + return camera2D; + } + + @Override + public Map audioInstances() { + return audioInstances; + } + + @Override + public void Reset() { + + } + + @Override + public Queue NetworkedActors() { + return null; + } +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprite.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprite.java index 5703d85..693066b 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprite.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprite.java @@ -1,118 +1,47 @@ package net.halbear.Terrain4J.EngineCore.Main.Scene; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.TextureCache; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.ModelsCache; +import net.halbear.Terrain4J.EngineCore.Main.Scene.Sprites.SpriteState; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.TextureCache; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.ModelsCache; import org.joml.Vector2f; import org.joml.Vector4f; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; -import static net.halbear.Terrain4J.EngineCore.Vulkan.SpriteRendering.SpriteMeshGenerator.GenerateModelFromTexture; +import static net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.SpriteRendering.SpriteMeshGenerator.GenerateModelFromTexture; -public class Sprite { - public static final Map SpriteRegistry = new HashMap<>(); +public interface Sprite { + public static final Map SpriteRegistry = new LinkedHashMap<>(); + public static final Map SpriteStateRegistry = new LinkedHashMap<>(); - private String ModelID; - private final String textureId; - private final Vector2f position; - private final Vector2f scale; - private final Vector2f size; - private final Vector4f colour; - private float rotation; - private int layer; - private final String ID; - private int texturePosition; + public Sprite SetCameraZValue(float CameraZValue); + public float GetCameraZValue(); - public Sprite(String ID, String textureId, Vector2f position, Vector2f Size, Vector2f Scale) { - this.ID = ID; - this.ModelID = "TO_BE_FULFILLED_LATER"; - this.textureId = textureId; - this.position = new Vector2f().set(position); - this.scale = new Vector2f().set(Scale); - this.size = new Vector2f().set(Size); - this.colour = new Vector4f(1.0f); - this.rotation = 0.0f; - this.layer = 0; - SpriteRegistry.put(ID, this); - } - public Sprite(String ID, String ModelID, String textureId, Vector2f position, Vector2f Scale, Vector2f Size) { - this.ID = ID; - this.ModelID = ModelID; - this.textureId = textureId; - this.position = new Vector2f().set(position); - this.scale = new Vector2f().set(Scale); - this.size = new Vector2f().set(Size); - this.colour = new Vector4f(1.0f); - this.rotation = 0.0f; - this.layer = 0; - SpriteRegistry.put(ID, this); - } + public Sprite CompileSprite(TextureCache textureCache, ModelsCache modelsCache, VulkanContext VkCtx); - public Sprite(String ID, String TextureID, Vector2f Position, Vector2f Scale, Vector2f Size, TextureCache textureCache, ModelsCache modelsCache, VulkanContext VkCtx){ - this.ID = ID; - this.textureId = TextureID; - this.ModelID = GenerateModelFromTexture(textureCache, modelsCache, VkCtx, TextureID, Size.y); - texturePosition = textureCache.GetPosition(textureId); - this.position = new Vector2f().set(Position); - this.scale = new Vector2f().set(Scale); - this.size = new Vector2f().set(Size); - this.colour = new Vector4f(1.0f); - SpriteRegistry.put(ID, this); - } + public int GetTexturePosition(); - public Sprite CompileSprite(TextureCache textureCache, ModelsCache modelsCache, VulkanContext VkCtx){ - this.ModelID = GenerateModelFromTexture(textureCache, modelsCache, VkCtx, textureId, this.size.y); - texturePosition = textureCache.GetPosition(textureId); - return this; - } + public String GetID(); - public int GetTexturePosition(){ - return texturePosition; - } + public String GetModelID(); - public String GetID(){ - return ID; - } + public String GetTextureID(); - public String GetModelID() { - return ModelID; - } + public Vector2f GetPosition(); - public String GetTextureID() { - return textureId; - } + public Vector2f GetSize(); - public Vector2f GetPosition() { - return position; - } + public Vector2f GetScale(); - public Vector2f GetSize() { - return size; - } + public Vector4f GetColour(); - public Vector2f GetScale() { - return scale; - } + public float GetRotation(); - public Vector4f GetColour() { - return colour; - } + public void SetRotation(float rotation); - public float GetRotation() { - return rotation; - } + public int GetLayer(); - public void SetRotation(float rotation) { - this.rotation = rotation; - } - - public int GetLayer() { - return layer; - } - - public void SetLayer(int layer) { - this.layer = layer; - } + public void SetLayer(int layer); } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/SpriteVk.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/SpriteVk.java new file mode 100644 index 0000000..28c0eab --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/SpriteVk.java @@ -0,0 +1,131 @@ +package net.halbear.Terrain4J.EngineCore.Main.Scene; + +import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; +import net.halbear.Terrain4J.EngineCore.Main.Scene.Sprites.SpriteState; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.TextureCache; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.ModelsCache; +import org.joml.Vector2f; +import org.joml.Vector4f; + +import java.util.LinkedHashMap; +import java.util.Map; + +import static net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.SpriteRendering.SpriteMeshGenerator.GenerateModelFromTexture; + +public class SpriteVk implements Sprite { + public static boolean SPRITE_STATE_MAP_INITIALIZED = false; + + private String ModelID; + private final String textureId; + private final Vector2f position; + private final Vector2f scale; + private final Vector2f size; + private final Vector4f colour; + private float rotation; + private int layer; + private final String ID; + private int texturePosition; + private float CameraZValue = 1.0f; + + public SpriteVk SetCameraZValue(float CameraZValue) { + this.CameraZValue = CameraZValue; + return this; + } + public float GetCameraZValue() { + return CameraZValue; + } + + public SpriteVk(String ID, String textureId, Vector2f position, Vector2f Size, Vector2f Scale) { + this.ID = ID; + this.ModelID = "TO_BE_FULFILLED_LATER"; + this.textureId = textureId; + this.position = new Vector2f().set(position); + this.scale = new Vector2f().set(Scale); + this.size = new Vector2f().set(Size); + this.colour = new Vector4f(1.0f); + this.rotation = 0.0f; + this.layer = 0; + SpriteRegistry.put(ID, this); + } + public SpriteVk(String ID, int texturePosition, String ModelID, String textureId, Vector2f position, Vector2f Scale, Vector2f Size) { + this.ID = ID; + this.ModelID = ModelID; + this.textureId = textureId; + this.texturePosition = texturePosition; + this.position = new Vector2f().set(position); + this.scale = new Vector2f().set(Scale); + this.size = new Vector2f().set(Size); + this.colour = new Vector4f(1.0f); + this.rotation = 0.0f; + this.layer = 0; + SpriteRegistry.put(ID, this); + } + + public SpriteVk(String ID, String TextureID, Vector2f Position, Vector2f Scale, Vector2f Size, TextureCache textureCache, ModelsCache modelsCache, VulkanContext VkCtx){ + this.ID = ID; + this.textureId = TextureID; + this.ModelID = GenerateModelFromTexture(textureCache, modelsCache, VkCtx, TextureID, Size.y); + texturePosition = textureCache.GetPosition(textureId); + this.position = new Vector2f().set(Position); + this.scale = new Vector2f().set(Scale); + this.size = new Vector2f().set(Size); + this.colour = new Vector4f(1.0f); + SpriteRegistry.put(ID, this); + } + + public SpriteVk CompileSprite(TextureCache textureCache, ModelsCache modelsCache, VulkanContext VkCtx){ + this.ModelID = GenerateModelFromTexture(textureCache, modelsCache, VkCtx, textureId, this.size.y); + texturePosition = textureCache.GetPosition(textureId); + SpriteStateRegistry.put(ID, new SpriteState(ModelID, textureId, ID, texturePosition, 0)); + SPRITE_STATE_MAP_INITIALIZED = false; + return this; + } + + public int GetTexturePosition(){ + return texturePosition; + } + + public String GetID(){ + return ID; + } + + public String GetModelID() { + return ModelID; + } + + public String GetTextureID() { + return textureId; + } + + public Vector2f GetPosition() { + return position; + } + + public Vector2f GetSize() { + return size; + } + + public Vector2f GetScale() { + return scale; + } + + public Vector4f GetColour() { + return colour; + } + + public float GetRotation() { + return rotation; + } + + public void SetRotation(float rotation) { + this.rotation = rotation; + } + + public int GetLayer() { + return layer; + } + + public void SetLayer(int layer) { + this.layer = layer; + } +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/LevelEntities.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/LevelEntities.java new file mode 100644 index 0000000..f4f0a48 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/LevelEntities.java @@ -0,0 +1,22 @@ +package net.halbear.Terrain4J.EngineCore.Main.Scene.Sprites; + +import net.halbear.Terrain4J.EngineCore.Main.Scene.Sprite; + +import java.util.List; + +public class LevelEntities implements SpriteCollection { + @Override + public CollectionType CollectionType() { + return CollectionType.Entities; + } + + @Override + public String CollectionName() { + return ""; + } + + @Override + public List GetSprites() { + return List.of(); + } +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/LimitlessTileMap.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/LimitlessTileMap.java new file mode 100644 index 0000000..a5888f1 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/LimitlessTileMap.java @@ -0,0 +1,36 @@ +package net.halbear.Terrain4J.EngineCore.Main.Scene.Sprites; + +import net.halbear.Terrain4J.EngineCore.Main.Scene.Sprite; +import org.joml.Vector2i; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +public class LimitlessTileMap implements SpriteCollection{ + + private final String Name; + private final Map TileMap = new LinkedHashMap<>(); + private final List Tiles = new ArrayList<>(); + + public LimitlessTileMap(String Name){ + this.Name = Name; + } + + @Override + public String CollectionName() { + return Name; + } + + @Override + public List GetSprites() { + return List.of(); + } + + @Override + public CollectionType CollectionType() { + return CollectionType.LimitlessTileMap; + } + +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/SpriteCollection.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/SpriteCollection.java new file mode 100644 index 0000000..6befefb --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/SpriteCollection.java @@ -0,0 +1,38 @@ +package net.halbear.Terrain4J.EngineCore.Main.Scene.Sprites; + +import net.halbear.Terrain4J.EngineCore.Main.Scene.Sprite; +import net.halbear.Terrain4J.EngineCore.Main.Scene.SpriteVk; +import org.joml.Vector2i; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +public interface SpriteCollection { + + public static Map SPRITE_STATE_MAP = new LinkedHashMap<>(); + public static Map GetSpriteStateMap() { + if(!SpriteVk.SPRITE_STATE_MAP_INITIALIZED){ + Map states = Sprite.SpriteStateRegistry; + Vector2i i = new Vector2i(0,0); + SPRITE_STATE_MAP.put(i.x, null); + i.x++; + states.forEach((name, state)->{ + SPRITE_STATE_MAP.put(i.x, state); + i.x++; + }); + } + return SPRITE_STATE_MAP; + } + + public enum CollectionType{ + Entities, + TileMap, + LimitlessTileMap + } + + public CollectionType CollectionType(); + public String CollectionName(); + public List GetSprites(); +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/SpriteLayer.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/SpriteLayer.java new file mode 100644 index 0000000..f30c44b --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/SpriteLayer.java @@ -0,0 +1,32 @@ +package net.halbear.Terrain4J.EngineCore.Main.Scene.Sprites; + +import net.halbear.Terrain4J.EngineCore.Main.Scene.Sprite; + +import java.util.ArrayList; +import java.util.List; + +public class SpriteLayer { + private int ZIndex = 0; + private final List Sprites = new ArrayList<>(); + + public SpriteLayer(int ZIndex){ + this.ZIndex = ZIndex; + } + + public int GetZindex(){return ZIndex;} + + public SpriteCollection GetSpriteCollection(int index){return Sprites.get(index);} + + public List GetSpriteCollections(){return Sprites;} + + public SpriteLayer AddNewCollection(SpriteCollection collection){ + Sprites.add(collection); + return this; + } + + public List GetSprites(){ + List sprites = new ArrayList<>(); + Sprites.forEach(spriteCollection -> sprites.addAll(spriteCollection.GetSprites())); + return sprites; + } +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/SpriteState.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/SpriteState.java new file mode 100644 index 0000000..2c6d37a --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/SpriteState.java @@ -0,0 +1,4 @@ +package net.halbear.Terrain4J.EngineCore.Main.Scene.Sprites; + +public record SpriteState(String ModelID,String TextureID, String StateName,int texturePosition, float Z) { +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/Tilemap.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/Tilemap.java new file mode 100644 index 0000000..95b4064 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/Sprites/Tilemap.java @@ -0,0 +1,68 @@ +package net.halbear.Terrain4J.EngineCore.Main.Scene.Sprites; + +import net.halbear.Terrain4J.EngineCore.Main.Scene.Sprite; +import net.halbear.Terrain4J.EngineCore.Main.Scene.SpriteVk; +import org.joml.Vector2f; +import org.joml.Vector2i; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class Tilemap implements SpriteCollection { + + private final String Name; + private int[][] TileMap; + private final List Tiles = new ArrayList<>(); + private Vector2i TilemapPosition; + private Vector2i TilemapSize; + private boolean CacheUpToDate = false; + private int TextureResolution = 8; + + public Tilemap(String Name, Vector2i TilemapSize, Vector2i TilemapPosition){ + this.Name = Name; + this.TilemapSize = TilemapSize; + this.TilemapPosition = TilemapPosition; + TileMap = new int[TilemapSize.x][TilemapSize.y]; + } + + public Tilemap SetTile(Vector2i TilePosition, int TileID){ + if(TilePosition.x < 0 || TilePosition.x >= TilemapSize.x || TilePosition.y < 0 || TilePosition.y >= TilemapSize.y) return this; + TileMap[TilePosition.x][TilePosition.y] = TileID; + return this; + } + + public int GetTile(Vector2i TilePosition){ + if(TilePosition.x < 0 || TilePosition.x >= TilemapSize.x || TilePosition.y < 0 || TilePosition.y >= TilemapSize.y) return -1; + return TileMap[TilePosition.x][TilePosition.y]; + } + + @Override + public String CollectionName() { + return Name; + } + + private void CacheTiles(){ + Tiles.clear(); + Map spriteStateMap = SpriteCollection.GetSpriteStateMap(); + for(int x = 0; x < TilemapSize.x; x++){ + for(int y = 0; y < TilemapSize.y; y++){ + if(TileMap[x][y] != -1){ + Tiles.add(new SpriteVk(Name + x + "_"+ y, spriteStateMap.get(TileMap[x][y]).texturePosition(), spriteStateMap.get(TileMap[x][y]).ModelID(), spriteStateMap.get(TileMap[x][y]).TextureID(), new Vector2f(TextureResolution * x + TilemapPosition.x, TextureResolution * y + TilemapPosition.y),new Vector2f(1,1),new Vector2f(TextureResolution,TextureResolution)).SetCameraZValue(spriteStateMap.get(TileMap[x][y]).Z())); + } + } + } + CacheUpToDate = true; + } + + @Override + public List GetSprites() { + if(!CacheUpToDate) CacheTiles(); + return Tiles; + } + @Override + public CollectionType CollectionType() { + return CollectionType.TileMap; + } + +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/VisualisedCollisionActor.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/VisualisedCollisionActor.java index fec4a6e..b1c96ac 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/VisualisedCollisionActor.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Scene/VisualisedCollisionActor.java @@ -15,7 +15,7 @@ public class VisualisedCollisionActor extends Actor{ final UUID LinkedMesh; public VisualisedCollisionActor(String ID, Vector3f Position, UUID LinkedMesh) { super(ID, CollisionCubeModelID, Position); - if(!PrimaryRuntime.Server && !RenderThread.Headless) { + if(!PrimaryRuntime.IsServer && !RenderThread.Headless) { this.LinkedMesh = LinkedMesh; CollisionVisuals.add(this); } else{ @@ -23,7 +23,7 @@ public class VisualisedCollisionActor extends Actor{ } } public void Update(){ - if(PrimaryRuntime.Server || RenderThread.Headless) return; + if(PrimaryRuntime.IsServer || RenderThread.Headless) return; ConvexMesh mesh = ConvexMesh.MeshRegistry.get(LinkedMesh); if(mesh != null) { SetScale(new Vector3f(mesh.hxhyhz).mul(2.01f)); diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Util/Maths/T4Math.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Util/Maths/T4Math.java index fceb68c..5fd3261 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Util/Maths/T4Math.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/Util/Maths/T4Math.java @@ -1,7 +1,5 @@ package net.halbear.Terrain4J.EngineCore.Main.Util.Maths; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyCollision.CollisionPoly; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.LegacyPhysicsController; import org.joml.*; import java.lang.Math; @@ -61,105 +59,6 @@ public class T4Math { } - public static class ComplexCollision{ - public static LegacyPhysicsController.CollisionResult ComputePolyToPolyIntersection(CollisionPoly poly1, CollisionPoly poly2){ - LegacyPhysicsController.CollisionResult result = new LegacyPhysicsController.CollisionResult(); - if(poly1 == null || poly2 == null) return null; - Vector3f[] vertices1 = new Vector3f[]{new Vector3f().set(poly1.v1()),new Vector3f().set(poly1.v2()),new Vector3f().set(poly1.v3())}; - Vector3f[] vertices2 = new Vector3f[]{new Vector3f().set(poly2.v1()),new Vector3f().set(poly2.v2()),new Vector3f().set(poly2.v3())}; - Vector3f e1 = new Vector3f().set(poly1.v2()).sub(poly1.v1()); - Vector3f e2 = new Vector3f().set(poly1.v3()).sub(poly1.v1()); - Vector3f Normal1 = new Vector3f().set(e1).cross(e2).normalize(); - float Distance1 = -Normal1.dot(poly1.v1()); - - float[] du = new float[3]; - for(int i = 0; i < 3; i++) du[i] = Math.abs(Normal1.dot(vertices2[i]) + Distance1) < Math3D.epsilon ? 0 : Normal1.dot(vertices2[i]) + Distance1; - if ((du[0] > 0 && du[1] > 0 && du[2] > 0) || (du[0] < 0 && du[1] < 0 && du[2] < 0)) return result; - - - Vector3f f1 = new Vector3f().set(poly2.v2()).sub(poly2.v1()); - Vector3f f2 = new Vector3f().set(poly2.v3()).sub(poly2.v1()); - Vector3f Normal2 = new Vector3f().set(f1).cross(f2).normalize(); - float Distance2 = -Normal2.dot(poly2.v1()); - - float[] dv = new float[3]; - for(int i = 0; i < 3; i++) dv[i] = Math.abs(Normal2.dot(vertices1[i]) + Distance2) < Math3D.epsilon ? 0 : Normal2.dot(vertices1[i]) + Distance2; - if ((dv[0] > 0 && dv[1] > 0 && dv[2] > 0) || (dv[0] < 0 && dv[1] < 0 && dv[2] < 0)) return result; - - Vector3f IntersectionDirection = new Vector3f().set(Normal1).cross(Normal2); - if (IntersectionDirection.lengthSquared() < Math3D.epsilon) { - return result; - } - IntersectionDirection.normalize(); - - Vector3f[] Segment1 = GetIntersectionPoints(poly1, dv); - Vector3f[] Segment2 = GetIntersectionPoints(poly2, du); - - if (Segment1 == null || Segment2 == null) return result; - - return ComputerSegmentOverlap(Segment1, Segment2, IntersectionDirection,Normal1); - } - - public static Vector3f[] GetIntersectionPoints(CollisionPoly poly, float[] d){ - Vector3f[] vertices1 = new Vector3f[]{new Vector3f().set(poly.v1()),new Vector3f().set(poly.v2()),new Vector3f().set(poly.v3())}; - Vector3f[] Points = new Vector3f[2]; - int Count = 0; - for(int i = 0; i < 3; i++) { - int next = (i + 1) % 3; - if (d[i] * d[next] < 0 || (d[i] == 0 && d[next] != 0) || (d[i] != 0 && d[next] == 0)) { - float Factor = d[i] / (d[i] - d[next]); - if (Float.isNaN(Factor) || Float.isInfinite(Factor)) Factor = 0.0f; - Vector3f Intersect = new Vector3f().set(vertices1[next]).sub(vertices1[i]) - .mul(Factor).add(vertices1[i]); - if(Count < 2){ - Points[Count++] = Intersect; - } - } - } - return Count == 2 ? Points : null; - } - - public static LegacyPhysicsController.CollisionResult ComputerSegmentOverlap(Vector3f[] Segment1, Vector3f[] Segment2, Vector3f Direction, Vector3f CollisionNormal){ - LegacyPhysicsController.CollisionResult result = new LegacyPhysicsController.CollisionResult(); - - float Poly1Min = Segment1[0].dot(Direction); - float Poly1Max = Segment1[1].dot(Direction); - Vector3f point1Min = Segment1[0], point1Max = Segment1[1]; - if(Poly1Min > Poly1Max){ - float temp = Poly1Max; - Poly1Max = Poly1Min; - Poly1Min = temp; - Vector3f pTemp = point1Min; - point1Min = point1Max; - point1Max = pTemp; - } - float Poly2Min = Segment2[0].dot(Direction); - float Poly2Max = Segment2[1].dot(Direction); - Vector3f point2Min = Segment2[0], point2Max = Segment2[1]; - if(Poly2Min > Poly2Max){ - float temp = Poly2Max; - Poly2Max = Poly2Min; - Poly2Min = temp; - Vector3f pTemp = point2Min; - point2Min = point2Max; - point2Max = pTemp; - } - - if (Poly1Max < Poly2Min - Math3D.epsilon || Poly2Max < Poly1Min - Math3D.epsilon) return result; - - float overlapMin = Math.max(Poly1Min, Poly2Min); - float overlapMax = Math.min(Poly1Max, Poly2Max); - float segmentLength = overlapMax - overlapMin; - - result.Intersects = true; - result.StartPoint = new Vector3f((Poly1Min > Poly2Min) ? point1Min : point2Min); - result.EndPoint = new Vector3f((Poly1Max < Poly2Max) ? point1Max : point2Max); - result.CollisionNormal = new Vector3f(CollisionNormal); - result.CollisionDepth = segmentLength; - - return result; - } - } public static class Math3D { public static float epsilon = 1e-8f; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Profiling/GPUProfiler.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Profiling/GPUProfiler.java index 1f50cea..3d4614b 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Profiling/GPUProfiler.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Profiling/GPUProfiler.java @@ -1,12 +1,9 @@ package net.halbear.Terrain4J.EngineCore.Profiling; -import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Device; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; -import java.nio.LongBuffer; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/GlModels/GLMesh.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/GlModels/GLMesh.java new file mode 100644 index 0000000..5f6b94c --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/GlModels/GLMesh.java @@ -0,0 +1,73 @@ +package net.halbear.Terrain4J.EngineCore.RenderingAPI.OpenGL.GlModels; + +import org.lwjgl.opengl.GL30; +import org.lwjgl.system.MemoryUtil; + +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.util.ArrayList; +import java.util.List; + +import static org.lwjgl.opengl.GL15.*; +import static org.lwjgl.opengl.GL20.glEnableVertexAttribArray; +import static org.lwjgl.opengl.GL20.glVertexAttribPointer; +import static org.lwjgl.opengl.GL30.*; + +public class GLMesh { + private int VertexCount; + private int VAO_ID; + private List VBO_ID_List; + + public GLMesh(float[] vertices, float[] colours, int[] indices) { + this.VertexCount = indices.length; + VBO_ID_List = new ArrayList<>(); + + VAO_ID = glGenVertexArrays(); + glBindVertexArray(VAO_ID); + + int vboId = glGenBuffers(); + VBO_ID_List.add(vboId); + FloatBuffer positionsBuffer = MemoryUtil.memCallocFloat(vertices.length); + positionsBuffer.put(0, vertices); + glBindBuffer(GL_ARRAY_BUFFER, vboId); + glBufferData(GL_ARRAY_BUFFER, positionsBuffer, GL_STATIC_DRAW); + glEnableVertexAttribArray(0); + glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0); + + vboId = glGenBuffers(); + VBO_ID_List.add(vboId); + FloatBuffer coloursBuffer = MemoryUtil.memCallocFloat(colours.length); + coloursBuffer.put(0, colours); + glBindBuffer(GL_ARRAY_BUFFER, vboId); + glBufferData(GL_ARRAY_BUFFER, coloursBuffer, GL_STATIC_DRAW); + glEnableVertexAttribArray(1); + glVertexAttribPointer(1, 3, GL_FLOAT, false, 0, 0); + + vboId = glGenBuffers(); + VBO_ID_List.add(vboId); + IntBuffer indicesBuffer = MemoryUtil.memCallocInt(indices.length); + indicesBuffer.put(0, indices); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboId); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, indicesBuffer, GL_STATIC_DRAW); + + glBindBuffer(GL_ARRAY_BUFFER, 0); + glBindVertexArray(0); + + MemoryUtil.memFree(positionsBuffer); + MemoryUtil.memFree(coloursBuffer); + MemoryUtil.memFree(indicesBuffer); + } + + public void CleanUp() { + VBO_ID_List.forEach(GL30::glDeleteBuffers); + glDeleteVertexArrays(VAO_ID); + } + + public int GetVertexCount() { + return VertexCount; + } + + public final int GetVaoID() { + return VAO_ID; + } +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/GlModels/GLModel.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/GlModels/GLModel.java new file mode 100644 index 0000000..e443bb7 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/GlModels/GLModel.java @@ -0,0 +1,8 @@ +package net.halbear.Terrain4J.EngineCore.RenderingAPI.OpenGL.GlModels; + +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.MeshData; + +import java.util.List; + +public record GLModel(String ID, List Meshes, String VertexPath, String IndexPath) { +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/GlModels/ModelsCache.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/GlModels/ModelsCache.java new file mode 100644 index 0000000..42b0a5a --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/GlModels/ModelsCache.java @@ -0,0 +1,23 @@ +package net.halbear.Terrain4J.EngineCore.RenderingAPI.OpenGL.GlModels; + +import java.util.HashMap; +import java.util.Map; + +public class ModelsCache { + private final Map MeshMap; + public ModelsCache(){ + MeshMap = new HashMap<>(); + } + + public void addMesh(String meshId, GLMesh mesh) { + MeshMap.put(meshId, mesh); + } + + public void cleanup() { + MeshMap.values().forEach(GLMesh::CleanUp); + } + + public Map getMeshMap() { + return MeshMap; + } +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/OpenGlUtils.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/OpenGlUtils.java new file mode 100644 index 0000000..b0cb810 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/OpenGlUtils.java @@ -0,0 +1,21 @@ +package net.halbear.Terrain4J.EngineCore.RenderingAPI.OpenGL; + +import org.tinylog.Logger; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class OpenGlUtils { + private OpenGlUtils(){} + + public static String ReadFile(String filePath){ + String string = ""; + try{ + string = new String(Files.readAllBytes(Paths.get(filePath))); + } catch (IOException e){ + Logger.error("Failed to read file: [{}] with error: [{}]", filePath, e.getMessage()); + } + return string; + } +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/Rendering/ForwardRenderer.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/Rendering/ForwardRenderer.java new file mode 100644 index 0000000..050501f --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/Rendering/ForwardRenderer.java @@ -0,0 +1,52 @@ +package net.halbear.Terrain4J.EngineCore.RenderingAPI.OpenGL.Rendering; + +import imgui.extension.imguizmo.flag.Mode; +import net.halbear.Terrain4J.EngineCore.Main.Scene.IScene; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.OpenGL.GlModels.GLMesh; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.OpenGL.GlModels.ModelsCache; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.OpenGL.Shader.ShaderProgram; +import org.tinylog.Logger; + +import java.util.ArrayList; +import java.util.List; + +import static org.lwjgl.opengl.GL11.*; +import static org.lwjgl.opengl.GL20.GL_FRAGMENT_SHADER; +import static org.lwjgl.opengl.GL20.GL_VERTEX_SHADER; +import static org.lwjgl.opengl.GL30.glBindVertexArray; + +public class ForwardRenderer implements SceneRender{ + + private ShaderProgram shaderProgram; + + public ForwardRenderer(){ + List shaderModules = new ArrayList<>(); + shaderModules.add(new ShaderProgram.ShaderModuleGL("resources/EngineResources/GLShaders/scene_vert.glsl", GL_VERTEX_SHADER)); + shaderModules.add(new ShaderProgram.ShaderModuleGL("resources/EngineResources/GLShaders/scene_frag.glsl", GL_FRAGMENT_SHADER)); + shaderProgram = new ShaderProgram(shaderModules); + } + + @Override + public void CleanUp() { + shaderProgram.CleanUp(); + } + + @Override + public void Render(IScene scene, ModelsCache modelsCache) { + shaderProgram.Bind(); + modelsCache.getMeshMap().forEach((key , value)->{ + glBindVertexArray(value.GetVaoID()); + glDrawElements(GL_TRIANGLES, value.GetVertexCount(), GL_UNSIGNED_INT, 0); + }); +// scene.GetActors().forEach(actor -> { +// GLMesh mesh = modelsCache.getMeshMap().get(actor.GetModelID()); +// glBindVertexArray(mesh.GetVaoID()); +// glDrawArrays(GL_TRIANGLES, 0, mesh.GetVertexCount()); +// } +// ); + + glBindVertexArray(0); + + shaderProgram.UnBind(); + } +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/Rendering/SceneRender.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/Rendering/SceneRender.java new file mode 100644 index 0000000..838435c --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/Rendering/SceneRender.java @@ -0,0 +1,9 @@ +package net.halbear.Terrain4J.EngineCore.RenderingAPI.OpenGL.Rendering; + +import net.halbear.Terrain4J.EngineCore.Main.Scene.IScene; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.OpenGL.GlModels.ModelsCache; + +public interface SceneRender { + public void CleanUp(); + public void Render(IScene scene, ModelsCache modelsCache) ; +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/Shader/ShaderModuleGL.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/Shader/ShaderModuleGL.java new file mode 100644 index 0000000..0799354 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/Shader/ShaderModuleGL.java @@ -0,0 +1,4 @@ +package net.halbear.Terrain4J.EngineCore.RenderingAPI.OpenGL.Shader; + +public class ShaderModuleGL { +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/Shader/ShaderProgram.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/Shader/ShaderProgram.java new file mode 100644 index 0000000..d23b84b --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/OpenGL/Shader/ShaderProgram.java @@ -0,0 +1,76 @@ +package net.halbear.Terrain4J.EngineCore.RenderingAPI.OpenGL.Shader; + +import net.halbear.Terrain4J.EngineCore.RenderingAPI.OpenGL.OpenGlUtils; +import org.lwjgl.opengl.GL30; +import org.tinylog.Logger; + +import java.util.ArrayList; +import java.util.List; + +import static org.lwjgl.opengl.GL20.*; + +public class ShaderProgram { + private final int ProgramID; + public ShaderProgram(List shaderModules){ + ProgramID = glCreateProgram(); + if(ProgramID == 0){ + Logger.error("Failed to create shader program"); + } + List ShaderModules = new ArrayList<>(); + shaderModules.forEach(shaderModule -> { + ShaderModules.add(CreateShader(OpenGlUtils.ReadFile(shaderModule.ShaderFile), shaderModule.ShaderType)); + }); + + LinkShaderProgram(ShaderModules); + } + + public void Bind(){ + glUseProgram(ProgramID); + } + + public void CleanUp(){ + UnBind(); + if(ProgramID != 0){ + glDeleteProgram(ProgramID); + } + } + + protected int CreateShader(String ShaderCode, int ShaderType){ + int ShaderID = glCreateShader(ShaderType); + if(ShaderID == 0){ + Logger.error("Failed to create shader of Type: " + ShaderType); + } + glShaderSource(ShaderID, ShaderCode); + glCompileShader(ShaderID); + if(glGetShaderi(ShaderID, GL_COMPILE_STATUS) == GL_FALSE){ + Logger.error("Failed to compile shader: [{}]",glGetShaderInfoLog(ShaderID, 1024)); + } + + glAttachShader(ProgramID, ShaderID); + + return ShaderID; + } + + public int GetProgramID(){return ProgramID;} + + public void LinkShaderProgram(List ShaderModules){ + glLinkProgram(ProgramID); + if(glGetProgrami(ProgramID, GL_LINK_STATUS) == GL_FALSE){ + Logger.error("Failed to link shader program: [{}]", glGetProgramInfoLog(ProgramID, 1024)); + } + + ShaderModules.forEach(ShaderID -> glDetachShader(ProgramID, ShaderID)); + ShaderModules.forEach(GL30::glDeleteShader); + } + + public void UnBind(){glUseProgram(0);} + + public void Validate(){ + glValidateProgram(ProgramID); + if(glGetProgrami(ProgramID, GL_VALIDATE_STATUS) == GL_FALSE){ + Logger.error("Failed to validate shader program: [{}]", glGetProgramInfoLog(ProgramID, 1024)); + } + } + + public record ShaderModuleGL(String ShaderFile, int ShaderType){} +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/GUI/GuiRenderer.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/GUI/GuiRenderer.java similarity index 92% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/GUI/GuiRenderer.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/GUI/GuiRenderer.java index 7172ff1..6cfbb07 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/GUI/GuiRenderer.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/GUI/GuiRenderer.java @@ -1,25 +1,24 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.GUI; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.GUI; import imgui.*; -import imgui.glfw.ImGuiImplGlfw; import imgui.type.ImInt; import net.halbear.Terrain4J.EngineCore.Input.KeyboardInput; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.DefaultPipeline; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.*; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Pipeline; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.PipelineBuildInfo; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.PushConstantsRange; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.PostProcessing.PostProcess; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.*; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandPool; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Queues.Queue; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.DefaultPipeline; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.*; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Pipeline; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.PipelineBuildInfo; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.PushConstantsRange; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.PostProcessing.PostProcess; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader.*; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandPool; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Device; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Queues.Queue; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.lwjgl.util.shaderc.Shaderc; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/GUI/GuiTexture.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/GUI/GuiTexture.java similarity index 85% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/GUI/GuiTexture.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/GUI/GuiTexture.java index 5b54dd6..3376430 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/GUI/GuiTexture.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/GUI/GuiTexture.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.GUI; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.GUI; import java.security.SecureRandom; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/GUI/GuiUtils.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/GUI/GuiUtils.java similarity index 92% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/GUI/GuiUtils.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/GUI/GuiUtils.java index 6aad4c2..46cf6e9 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/GUI/GuiUtils.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/GUI/GuiUtils.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.GUI; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.GUI; import imgui.ImGui; import imgui.ImGuiIO; @@ -128,8 +128,8 @@ public class GuiUtils { @Override public void invoke(long WindowHandle, int c){ ImGuiIO imGuiIO = ImGui.getIO(); - if(!imGuiIO.getWantCaptureKeyboard()) return; imGuiIO.addInputCharacter(c); + // if(!imGuiIO.getWantCaptureKeyboard()) return; } } @@ -137,12 +137,16 @@ public class GuiUtils { @Override public void invoke(long WindowHandle, int Key, int ScanCode, int Action, int Mods){ ImGuiIO imGuiIO = ImGui.getIO(); - if(!imGuiIO.getWantCaptureKeyboard()) return; - if(Action == GLFW_PRESS){ + if(Action == GLFW_PRESS || Action == GLFW_REPEAT){ imGuiIO.addKeyEvent(GetImGuiKey(Key),true); } else if(Action == GLFW_RELEASE){ imGuiIO.addKeyEvent(GetImGuiKey(Key),false); } + imGuiIO.setKeyCtrl((Mods & GLFW_MOD_CONTROL) != 0); + imGuiIO.setKeyShift((Mods & GLFW_MOD_SHIFT) != 0); + imGuiIO.setKeyAlt((Mods & GLFW_MOD_ALT) != 0); + imGuiIO.setKeySuper((Mods & GLFW_MOD_SUPER) != 0); + //if(!imGuiIO.getWantCaptureKeyboard()) return; } } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/GUI/GuiVertexBufferStruct.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/GUI/GuiVertexBufferStruct.java similarity index 94% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/GUI/GuiVertexBufferStruct.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/GUI/GuiVertexBufferStruct.java index 74b4c01..7c619ec 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/GUI/GuiVertexBufferStruct.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/GUI/GuiVertexBufferStruct.java @@ -1,6 +1,6 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.GUI; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.GUI; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.lwjgl.vulkan.VkPipelineVertexInputStateCreateInfo; import org.lwjgl.vulkan.VkVertexInputAttributeDescription; import org.lwjgl.vulkan.VkVertexInputBindingDescription; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/DeferredRendering/LightRenderer.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/DeferredRendering/LightRenderer.java similarity index 92% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/DeferredRendering/LightRenderer.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/DeferredRendering/LightRenderer.java index a590110..ae8d2d2 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/DeferredRendering/LightRenderer.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/DeferredRendering/LightRenderer.java @@ -1,25 +1,24 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.DeferredRendering; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.DeferredRendering; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; import net.halbear.Terrain4J.EngineCore.Main.Scene.ILight; import net.halbear.Terrain4J.EngineCore.Main.Scene.IScene; -import net.halbear.Terrain4J.EngineCore.Main.Scene.Light; import net.halbear.Terrain4J.EngineCore.Main.Scene.SceneLightingManager; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.EmptyVertexBufferStruct; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.DefaultPipeline; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.Attachment; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.Image; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Pipeline; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.PipelineBuildInfo; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.*; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.ImageView; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.SwapChain.SwapChain; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.EmptyVertexBufferStruct; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.DefaultPipeline; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.Attachment; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.Image; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Pipeline; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.PipelineBuildInfo; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader.*; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Device; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.ImageView; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.SwapChain.SwapChain; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.lwjgl.util.shaderc.Shaderc; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/DeferredRendering/MultiRenderTargetAttachments.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/DeferredRendering/MultiRenderTargetAttachments.java similarity index 93% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/DeferredRendering/MultiRenderTargetAttachments.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/DeferredRendering/MultiRenderTargetAttachments.java index dd1629a..6ece964 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/DeferredRendering/MultiRenderTargetAttachments.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/DeferredRendering/MultiRenderTargetAttachments.java @@ -1,7 +1,7 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.DeferredRendering; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.DeferredRendering; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.Attachment; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.Attachment; import org.lwjgl.vulkan.VkExtent2D; import java.util.ArrayList; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/DynamicMesh/DeferredResource.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/DynamicMesh/DeferredResource.java similarity index 80% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/DynamicMesh/DeferredResource.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/DynamicMesh/DeferredResource.java index 3d6b643..139b456 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/DynamicMesh/DeferredResource.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/DynamicMesh/DeferredResource.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.DynamicMesh; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.DynamicMesh; public class DeferredResource { public final long bufferHandle; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/DynamicMesh/DynamicTerrainMesh.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/DynamicMesh/DynamicTerrainMesh.java similarity index 93% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/DynamicMesh/DynamicTerrainMesh.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/DynamicMesh/DynamicTerrainMesh.java index fd4a869..28812e3 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/DynamicMesh/DynamicTerrainMesh.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/DynamicMesh/DynamicTerrainMesh.java @@ -1,9 +1,8 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.DynamicMesh; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.DynamicMesh; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Device; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkBufferCopy; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/EmptyVertexBufferStruct.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/EmptyVertexBufferStruct.java similarity index 88% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/EmptyVertexBufferStruct.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/EmptyVertexBufferStruct.java index ee45e07..35fa883 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/EmptyVertexBufferStruct.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/EmptyVertexBufferStruct.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering; import org.lwjgl.vulkan.VkPipelineVertexInputStateCreateInfo; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/DefaultPipeline.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/DefaultPipeline.java similarity index 96% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/DefaultPipeline.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/DefaultPipeline.java index cf29e2c..9df7b4b 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/DefaultPipeline.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/DefaultPipeline.java @@ -1,11 +1,11 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.DescriptorSetLayout; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.ShaderModule; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader.DescriptorSetLayout; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader.ShaderModule; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Device; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; import org.tinylog.Logger; @@ -28,8 +28,6 @@ import static org.lwjgl.vulkan.VK13.VK_DYNAMIC_STATE_SCISSOR; import static org.lwjgl.vulkan.VK13.VK_DYNAMIC_STATE_VIEWPORT; import static org.lwjgl.vulkan.VK13.VK_FORMAT_UNDEFINED; import static org.lwjgl.vulkan.VK13.VK_FRONT_FACE_CLOCKWISE; -import static org.lwjgl.vulkan.VK13.VK_NULL_HANDLE; -import static org.lwjgl.vulkan.VK13.VK_SAMPLE_COUNT_1_BIT; import static org.lwjgl.vulkan.VK13.VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO; import static org.lwjgl.vulkan.VK13.vkCreateGraphicsPipelines; import static org.lwjgl.vulkan.VK13.vkCreatePipelineLayout; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/GraphUtils.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/GraphUtils.java similarity index 79% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/GraphUtils.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/GraphUtils.java index f2b1a05..246016e 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/GraphUtils.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/GraphUtils.java @@ -1,8 +1,7 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline; -import net.halbear.Terrain4J.EngineCore.Display.GLFWImageParser; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.ImageSrc; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.ImageSrc; import org.lwjgl.system.MemoryStack; import org.tinylog.Logger; @@ -16,12 +15,12 @@ public class GraphUtils { private GraphUtils(){ } public static void CleanImageData(ImageSrc imageSrc){ - Logger.debug("Loading Image Data [{}]",imageSrc.data()); + // Logger.debug("Loading Image Data [{}]",imageSrc.data()); stbi_image_free(imageSrc.data()); } public static ImageSrc LoadImage(String Filename) throws IOException{ - Logger.debug("Loading Image [{}]",Filename); + // Logger.debug("Loading Image [{}]",Filename); ImageSrc newImage; ByteBuffer image; try (MemoryStack MemStack = MemoryStack.stackPush()) { diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/Attachment.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/Attachment.java similarity index 87% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/Attachment.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/Attachment.java index e73ce9a..1af25f6 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/Attachment.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/Attachment.java @@ -1,10 +1,9 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.ImageView; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.ImageView; -import static org.lwjgl.util.vma.Vma.VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT; import static org.lwjgl.vulkan.VK13.*; public class Attachment { private final Image VkImage; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/CubeMapTexture.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/CubeMapTexture.java similarity index 93% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/CubeMapTexture.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/CubeMapTexture.java index 5fed400..d344b79 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/CubeMapTexture.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/CubeMapTexture.java @@ -1,17 +1,15 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.GraphUtils; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.ImageView; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.GraphUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.ImageView; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanBuffer; import org.lwjgl.system.MemoryStack; -import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.*; import java.io.IOException; import java.nio.ByteBuffer; -import java.nio.LongBuffer; import static org.lwjgl.system.MemoryUtil.memByteBuffer; import static org.lwjgl.util.vma.Vma.VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/ITexture.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/ITexture.java similarity index 70% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/ITexture.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/ITexture.java index 4d791de..f13d4c8 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/ITexture.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/ITexture.java @@ -1,8 +1,8 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.ImageView; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.ImageView; import java.nio.ByteBuffer; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/Image.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/Image.java similarity index 92% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/Image.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/Image.java index f11e1db..8f54df9 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/Image.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/Image.java @@ -1,15 +1,11 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images; -import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.util.vma.VmaAllocationCreateInfo; import org.lwjgl.vulkan.VkImageCreateInfo; -import org.lwjgl.vulkan.VkMemoryAllocateInfo; -import org.lwjgl.vulkan.VkMemoryRequirements; import java.nio.LongBuffer; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/ImageSrc.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/ImageSrc.java similarity index 55% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/ImageSrc.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/ImageSrc.java index 43bceac..410bd4c 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/ImageSrc.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/ImageSrc.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images; import java.nio.ByteBuffer; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/Texture.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/Texture.java similarity index 95% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/Texture.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/Texture.java index 8114992..0dd9906 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/Texture.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/Texture.java @@ -1,22 +1,19 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; import net.halbear.Terrain4J.EngineCore.Main.Util.Maths.T4Math; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.ImageView; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.ImageView; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.*; -import org.tinylog.Logger; import java.nio.ByteBuffer; import static org.lwjgl.util.vma.Vma.VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT; import static org.lwjgl.util.vma.Vma.VMA_MEMORY_USAGE_AUTO; import static org.lwjgl.vulkan.VK10.*; -import static org.lwjgl.vulkan.VK13.VK_ACCESS_2_NONE; import static org.lwjgl.vulkan.VK13.vkCmdPipelineBarrier2; public class Texture implements ITexture { diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/TextureCache.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/TextureCache.java similarity index 89% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/TextureCache.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/TextureCache.java index 0233c3f..40b4f66 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Images/TextureCache.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Images/TextureCache.java @@ -1,13 +1,12 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.GraphUtils; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.IndexedLinkedHashMap; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.VulkanMaterial; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandPool; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Queues.Queue; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.GraphUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.IndexedLinkedHashMap; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandPool; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Queues.Queue; import org.tinylog.Logger; import java.io.IOException; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/IndexedLinkedHashMap.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/IndexedLinkedHashMap.java similarity index 88% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/IndexedLinkedHashMap.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/IndexedLinkedHashMap.java index 5bc28fa..855acb7 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/IndexedLinkedHashMap.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/IndexedLinkedHashMap.java @@ -1,9 +1,8 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; -import java.util.Map; public class IndexedLinkedHashMap extends LinkedHashMap { private final List IndexList = new ArrayList<>(); diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Pipeline.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Pipeline.java similarity index 73% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Pipeline.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Pipeline.java index 68dc670..269a97b 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/Pipeline.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/Pipeline.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/PipelineBuildInfo.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/PipelineBuildInfo.java similarity index 89% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/PipelineBuildInfo.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/PipelineBuildInfo.java index 2411d81..2e9f019 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/PipelineBuildInfo.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/PipelineBuildInfo.java @@ -1,10 +1,8 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.DescriptorSet; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.DescriptorSetLayout; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.ShaderModule; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader.DescriptorSetLayout; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader.ShaderModule; import org.lwjgl.vulkan.VkPipelineVertexInputStateCreateInfo; -import org.lwjgl.vulkan.VkPushConstantRange; import static org.lwjgl.vulkan.VK10.VK_FORMAT_UNDEFINED; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/PipelineCache.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/PipelineCache.java similarity index 82% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/PipelineCache.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/PipelineCache.java index 342a7b0..da92ebd 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/PipelineCache.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/PipelineCache.java @@ -1,7 +1,7 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Device; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkPipelineCacheCreateInfo; import org.tinylog.Logger; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/PushConstantsRange.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/PushConstantsRange.java new file mode 100644 index 0000000..3ba3e51 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Pipeline/PushConstantsRange.java @@ -0,0 +1,4 @@ +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline; + +public record PushConstantsRange(int Stage, int Offset, int Size) { +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/PostProcessing/PostProcess.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/PostProcessing/PostProcess.java similarity index 91% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/PostProcessing/PostProcess.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/PostProcessing/PostProcess.java index a4ca4c8..7084d99 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/PostProcessing/PostProcess.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/PostProcessing/PostProcess.java @@ -1,19 +1,19 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.PostProcessing; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.PostProcessing; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.EmptyVertexBufferStruct; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.DefaultPipeline; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.Attachment; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.Image; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Pipeline; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.PipelineBuildInfo; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.*; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.SwapChain.SwapChain; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.EmptyVertexBufferStruct; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.DefaultPipeline; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.Attachment; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.Image; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Pipeline; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.PipelineBuildInfo; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader.*; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Device; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.SwapChain.SwapChain; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.lwjgl.util.shaderc.Shaderc; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/PostProcessing/SpecializationConstants.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/PostProcessing/SpecializationConstants.java similarity index 88% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/PostProcessing/SpecializationConstants.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/PostProcessing/SpecializationConstants.java index a55ce40..7ee21ae 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/PostProcessing/SpecializationConstants.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/PostProcessing/SpecializationConstants.java @@ -1,7 +1,7 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.PostProcessing; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.PostProcessing; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.VkSpecializationInfo; import org.lwjgl.vulkan.VkSpecializationMapEntry; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Projection/Project3D.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Projection/Project3D.java similarity index 94% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Projection/Project3D.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Projection/Project3D.java index cd8e0f0..5357f6f 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Projection/Project3D.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Projection/Project3D.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Projection; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Projection; import org.joml.Matrix4f; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/DescriptorAllocator.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/DescriptorAllocator.java similarity index 95% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/DescriptorAllocator.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/DescriptorAllocator.java index e4aa909..bf7f661 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/DescriptorAllocator.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/DescriptorAllocator.java @@ -1,9 +1,8 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.PhysicalDevice; -import org.lwjgl.vulkan.VkPhysicalDeviceFeatures2; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Device; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.PhysicalDevice; import org.lwjgl.vulkan.VkPhysicalDeviceLimits; import org.tinylog.Logger; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/DescriptorPool.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/DescriptorPool.java similarity index 90% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/DescriptorPool.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/DescriptorPool.java index c229427..541fdea 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/DescriptorPool.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/DescriptorPool.java @@ -1,6 +1,6 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Device; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkDescriptorPoolCreateInfo; import org.lwjgl.vulkan.VkDescriptorPoolSize; @@ -9,7 +9,7 @@ import org.tinylog.Logger; import java.nio.LongBuffer; import java.util.List; -import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck; +import static net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils.vkCheck; import static org.lwjgl.vulkan.VK10.*; public class DescriptorPool { diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/DescriptorSet.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/DescriptorSet.java similarity index 93% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/DescriptorSet.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/DescriptorSet.java index 57863c0..fb5d281 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/DescriptorSet.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/DescriptorSet.java @@ -1,8 +1,8 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.ImageView; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Device; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.ImageView; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkDescriptorBufferInfo; import org.lwjgl.vulkan.VkDescriptorImageInfo; @@ -14,7 +14,7 @@ import java.nio.LongBuffer; import java.util.ArrayList; import java.util.List; -import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck; +import static net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils.vkCheck; import static org.lwjgl.vulkan.VK10.*; public class DescriptorSet { diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/DescriptorSetLayout.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/DescriptorSetLayout.java similarity index 93% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/DescriptorSetLayout.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/DescriptorSetLayout.java index a88183f..8615397 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/DescriptorSetLayout.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/DescriptorSetLayout.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; import org.lwjgl.system.MemoryStack; @@ -8,7 +8,7 @@ import org.tinylog.Logger; import java.nio.LongBuffer; -import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck; +import static net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils.vkCheck; import static org.lwjgl.vulkan.VK10.vkCreateDescriptorSetLayout; import static org.lwjgl.vulkan.VK10.vkDestroyDescriptorSetLayout; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/ShaderCompiler.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/ShaderCompiler.java similarity index 97% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/ShaderCompiler.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/ShaderCompiler.java index ee6eff4..0a3b214 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/ShaderCompiler.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/ShaderCompiler.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import org.lwjgl.util.shaderc.Shaderc; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/ShaderModule.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/ShaderModule.java similarity index 93% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/ShaderModule.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/ShaderModule.java index 9624fda..47cab1f 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/ShaderModule.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/ShaderModule.java @@ -1,7 +1,7 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkShaderModuleCreateInfo; import static org.lwjgl.vulkan.VK13.vkCreateShaderModule; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/TextureSampler.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/TextureSampler.java similarity index 92% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/TextureSampler.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/TextureSampler.java index 089b3b3..c3aa452 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/TextureSampler.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/TextureSampler.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; import org.lwjgl.system.MemoryStack; @@ -6,7 +6,7 @@ import org.lwjgl.vulkan.VkSamplerCreateInfo; import java.nio.LongBuffer; -import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck; +import static net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils.vkCheck; import static org.lwjgl.vulkan.VK10.*; public class TextureSampler { diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/TextureSamplerInfo.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/TextureSamplerInfo.java similarity index 57% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/TextureSamplerInfo.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/TextureSamplerInfo.java index 7d382d6..60c1c2c 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shader/TextureSamplerInfo.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shader/TextureSamplerInfo.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader; public record TextureSamplerInfo(int AddressMode, int BorderColour, int MipLevels,boolean Anisotropy) { } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shadows/CascadeData.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shadows/CascadeData.java similarity index 87% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shadows/CascadeData.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shadows/CascadeData.java index f672008..5b53f5d 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shadows/CascadeData.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shadows/CascadeData.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shadows; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shadows; import org.joml.Matrix4f; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shadows/CascadeShadows.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shadows/CascadeShadows.java similarity index 86% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shadows/CascadeShadows.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shadows/CascadeShadows.java index dd087b1..1c02bf8 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shadows/CascadeShadows.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shadows/CascadeShadows.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shadows; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shadows; import net.halbear.Terrain4J.EngineCore.Main.Scene.SceneLightingManager; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shadows/ShadowRenderer.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shadows/ShadowRenderer.java similarity index 88% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shadows/ShadowRenderer.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shadows/ShadowRenderer.java index 6f058d7..5bb8f68 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shadows/ShadowRenderer.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shadows/ShadowRenderer.java @@ -1,6 +1,6 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shadows; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shadows; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import static org.lwjgl.vulkan.VK10.VK_FORMAT_D32_SFLOAT; import static org.lwjgl.vulkan.VK10.VK_FORMAT_R32G32_SFLOAT; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shadows/ShadowUtils.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shadows/ShadowUtils.java similarity index 97% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shadows/ShadowUtils.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shadows/ShadowUtils.java index 0322f21..ea2e3f2 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Shadows/ShadowUtils.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/Shadows/ShadowUtils.java @@ -1,16 +1,15 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shadows; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shadows; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Main.Scene.Camera; import net.halbear.Terrain4J.EngineCore.Main.Scene.ILight; import net.halbear.Terrain4J.EngineCore.Main.Scene.IScene; import net.halbear.Terrain4J.EngineCore.Main.Scene.SceneLightingManager; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Projection.Project3D; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Projection.Project3D; import org.joml.Matrix4f; import org.joml.Vector3f; import org.joml.Vector4f; -import javax.swing.text.View; import java.util.List; public class ShadowUtils { diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/TerrainMeshVertexBufferStructure.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/TerrainMeshVertexBufferStructure.java similarity index 92% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/TerrainMeshVertexBufferStructure.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/TerrainMeshVertexBufferStructure.java index 35fa8b2..80b4dd1 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/TerrainMeshVertexBufferStructure.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/TerrainMeshVertexBufferStructure.java @@ -1,12 +1,11 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.lwjgl.vulkan.VkPipelineVertexInputStateCreateInfo; import org.lwjgl.vulkan.VkVertexInputAttributeDescription; import org.lwjgl.vulkan.VkVertexInputBindingDescription; import static org.lwjgl.vulkan.VK10.VK_FORMAT_R32G32B32A32_SFLOAT; -import static org.lwjgl.vulkan.VK10.VK_FORMAT_R32G32_SFLOAT; import static org.lwjgl.vulkan.VK13.VK_FORMAT_R32G32B32_SFLOAT; import static org.lwjgl.vulkan.VK13.VK_VERTEX_INPUT_RATE_VERTEX; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VertexBufferStructure.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VertexBufferStructure.java similarity index 96% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VertexBufferStructure.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VertexBufferStructure.java index 59f54cd..a99975b 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VertexBufferStructure.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VertexBufferStructure.java @@ -1,6 +1,6 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.lwjgl.vulkan.VkPipelineVertexInputStateCreateInfo; import org.lwjgl.vulkan.VkVertexInputAttributeDescription; import org.lwjgl.vulkan.VkVertexInputBindingDescription; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/MaterialData.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/MaterialData.java similarity index 71% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/MaterialData.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/MaterialData.java index b8360ef..5e2f2f7 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/MaterialData.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/MaterialData.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel; import org.joml.Vector4f; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/MaterialsCache.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/MaterialsCache.java similarity index 85% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/MaterialsCache.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/MaterialsCache.java index 5868b77..82e0597 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/MaterialsCache.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/MaterialsCache.java @@ -1,22 +1,19 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.ITexture; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.Texture; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.TextureCache; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.IndexedLinkedHashMap; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandPool; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.GPUSynchronisation.TransferBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Queues.Queue; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.ITexture; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.TextureCache; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.IndexedLinkedHashMap; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandPool; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.GPUSynchronisation.TransferBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Queues.Queue; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.lwjgl.system.MemoryUtil; import org.tinylog.Logger; -import org.w3c.dom.Text; import java.nio.ByteBuffer; -import java.util.Arrays; import java.util.List; import static org.lwjgl.util.vma.Vma.VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/MeshData.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/MeshData.java similarity index 60% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/MeshData.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/MeshData.java index 4a4bf85..b458ca4 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/MeshData.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/MeshData.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel; public record MeshData(String ID, String MaterialID, int OffsetVertex, int VertexSize, int OffsetIndex, int IndexSize) { } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/ModelBinaryData.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/ModelBinaryData.java similarity index 96% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/ModelBinaryData.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/ModelBinaryData.java index e2c170c..ce7aa0a 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/ModelBinaryData.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/ModelBinaryData.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel; import java.io.*; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/ModelData.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/ModelData.java similarity index 61% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/ModelData.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/ModelData.java index 221ab18..6a3965d 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/ModelData.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/ModelData.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel; import java.util.List; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/ModelsCache.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/ModelsCache.java similarity index 90% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/ModelsCache.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/ModelsCache.java index 3855b4e..21225e1 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/ModelsCache.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/ModelsCache.java @@ -1,18 +1,13 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.DescriptorAllocator; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.DescriptorSet; -import net.halbear.Terrain4J.EngineCore.Vulkan.SpriteRendering.SpriteMeshGenerator; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandPool; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.GPUSynchronisation.TransferBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Queues.Queue; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.DeferredSceneRender; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; -import org.lwjgl.PointerBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.SpriteRendering.SpriteMeshGenerator; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandPool; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.GPUSynchronisation.TransferBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Queues.Queue; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.VkCommandBuffer; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/VulkanMaterial.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/VulkanMaterial.java new file mode 100644 index 0000000..2ddcb75 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/VulkanMaterial.java @@ -0,0 +1,4 @@ +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel; + +public record VulkanMaterial(String ID, boolean HasTransparency) { +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/VulkanMesh.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/VulkanMesh.java similarity index 67% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/VulkanMesh.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/VulkanMesh.java index 1738bdc..b1cdbf8 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/VulkanMesh.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/VulkanMesh.java @@ -1,7 +1,7 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanBuffer; public record VulkanMesh(String ID, VulkanBuffer VerticesBuffer,VulkanBuffer IndicesBuffer,int IndicesCount, String MaterialID) { public void Cleanup(VulkanContext VkCtx){ diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/VulkanModel.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/VulkanModel.java similarity index 87% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/VulkanModel.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/VulkanModel.java index 1c40924..c47805f 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/VulkanModel.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Rendering/VkModel/VulkanModel.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/SpriteRendering/BillboardMeshGenerator.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/SpriteRendering/BillboardMeshGenerator.java similarity index 95% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/SpriteRendering/BillboardMeshGenerator.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/SpriteRendering/BillboardMeshGenerator.java index 5184803..640f768 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/SpriteRendering/BillboardMeshGenerator.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/SpriteRendering/BillboardMeshGenerator.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.SpriteRendering; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.SpriteRendering; public final class BillboardMeshGenerator { diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/SpriteRendering/SpriteMeshGenerator.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/SpriteRendering/SpriteMeshGenerator.java similarity index 92% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/SpriteRendering/SpriteMeshGenerator.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/SpriteRendering/SpriteMeshGenerator.java index 2a01464..590c0b4 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/SpriteRendering/SpriteMeshGenerator.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/SpriteRendering/SpriteMeshGenerator.java @@ -1,8 +1,8 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.SpriteRendering; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.SpriteRendering; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.TextureCache; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.ModelsCache; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.TextureCache; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.ModelsCache; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/SpriteRendering/SpriteRenderer.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/SpriteRendering/SpriteRenderer.java similarity index 87% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/SpriteRendering/SpriteRenderer.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/SpriteRendering/SpriteRenderer.java index 87a3565..88d0063 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/SpriteRendering/SpriteRenderer.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/SpriteRendering/SpriteRenderer.java @@ -1,24 +1,24 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.SpriteRendering; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.SpriteRendering; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; import net.halbear.Terrain4J.EngineCore.Main.Scene.IScene; import net.halbear.Terrain4J.EngineCore.Main.Scene.Sprite; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.DeferredRendering.MultiRenderTargetAttachments; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.DefaultPipeline; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.*; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Pipeline; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.PipelineBuildInfo; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.PushConstantsRange; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.*; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.*; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.ImageView; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.SwapChain.SwapChain; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.DeferredRendering.MultiRenderTargetAttachments; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.DefaultPipeline; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.*; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Pipeline; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.PipelineBuildInfo; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.PushConstantsRange; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader.*; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.*; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Device; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.ImageView; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.SwapChain.SwapChain; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.joml.Vector2f; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; @@ -45,7 +45,7 @@ public class SpriteRenderer { private static final String SPRITE_TRANSLUCENT_FRAGMENT_SHADER_SPV = SPRITE_FRAGMENT_SHADER_GLSL + ".spv"; private static final String SPRITE_VERTEX_SHADER_GLSL = "resources/EngineResources/SpriteShaders/sprite_vertex.glsl"; private static final String SPRITE_VERTEX_SHADER_SPV = SPRITE_VERTEX_SHADER_GLSL + ".spv"; - private static final int PUSH_CONSTANTS_SIZE = VulkanUtils.VEC2_SIZE + VulkanUtils.VEC2_SIZE + VulkanUtils.VEC2_SIZE + VulkanUtils.INT_SIZE; + private static final int PUSH_CONSTANTS_SIZE = VulkanUtils.VEC2_SIZE + VulkanUtils.VEC2_SIZE + VulkanUtils.VEC2_SIZE + VulkanUtils.FLOAT_SIZE + VulkanUtils.INT_SIZE; private final VulkanBuffer[] IndexBuffers; private final VulkanBuffer[] VertexBuffers; @@ -160,7 +160,8 @@ public class SpriteRenderer { new PushConstantsRange(VK_SHADER_STAGE_VERTEX_BIT,0,VulkanUtils.VEC2_SIZE), new PushConstantsRange(VK_SHADER_STAGE_VERTEX_BIT,VulkanUtils.VEC2_SIZE,VulkanUtils.VEC2_SIZE), new PushConstantsRange(VK_SHADER_STAGE_VERTEX_BIT,VulkanUtils.VEC2_SIZE * 2,VulkanUtils.VEC2_SIZE), - new PushConstantsRange(VK_SHADER_STAGE_FRAGMENT_BIT,VulkanUtils.VEC2_SIZE * 3,VulkanUtils.INT_SIZE) + new PushConstantsRange(VK_SHADER_STAGE_VERTEX_BIT,VulkanUtils.VEC2_SIZE * 3,VulkanUtils.FLOAT_SIZE), + new PushConstantsRange(VK_SHADER_STAGE_FRAGMENT_BIT,VulkanUtils.VEC2_SIZE * 3 + VulkanUtils.FLOAT_SIZE,VulkanUtils.INT_SIZE) }) .SetDescriptorSetLayouts(DescriptorSetLayouts) .SetBlendingMethod(BlendingMethod) @@ -173,19 +174,22 @@ public class SpriteRenderer { return pipeline; } - private void SetPushConstants(VkCommandBuffer CmdHandle, Vector2f ScreenSize, Vector2f ModelSize, Vector2f Position, int TextureIndex, Pipeline VkPipeline){ + private void SetPushConstants(VkCommandBuffer CmdHandle, Vector2f ScreenSize, float CameraZValue, Vector2f ModelSize, Vector2f Position, int TextureIndex, Pipeline VkPipeline){ ModelSize.get(0,PushConstBuffer); Position.get(VulkanUtils.VEC2_SIZE, PushConstBuffer); ScreenSize.get(VulkanUtils.VEC2_SIZE * 2, PushConstBuffer); - PushConstBuffer.putInt(VulkanUtils.VEC2_SIZE * 3, TextureIndex); + PushConstBuffer.putFloat(VulkanUtils.VEC2_SIZE * 3, CameraZValue); + PushConstBuffer.putInt(VulkanUtils.VEC2_SIZE * 3 + VulkanUtils.FLOAT_SIZE, TextureIndex); vkCmdPushConstants(CmdHandle, VkPipeline.GetVulkanPipelineLayout(), VK_SHADER_STAGE_VERTEX_BIT, 0, PushConstBuffer.slice(0,VulkanUtils.VEC2_SIZE)); vkCmdPushConstants(CmdHandle, VkPipeline.GetVulkanPipelineLayout(), VK_SHADER_STAGE_VERTEX_BIT, VulkanUtils.VEC2_SIZE, PushConstBuffer.slice(VulkanUtils.VEC2_SIZE,VulkanUtils.VEC2_SIZE)); vkCmdPushConstants(CmdHandle, VkPipeline.GetVulkanPipelineLayout(), VK_SHADER_STAGE_VERTEX_BIT, VulkanUtils.VEC2_SIZE * 2, PushConstBuffer.slice(VulkanUtils.VEC2_SIZE * 2,VulkanUtils.VEC2_SIZE)); - vkCmdPushConstants(CmdHandle, VkPipeline.GetVulkanPipelineLayout(), VK_SHADER_STAGE_FRAGMENT_BIT, VulkanUtils.VEC2_SIZE * 3, - PushConstBuffer.slice(VulkanUtils.VEC2_SIZE* 3, VulkanUtils.INT_SIZE)); + vkCmdPushConstants(CmdHandle, VkPipeline.GetVulkanPipelineLayout(), VK_SHADER_STAGE_VERTEX_BIT, VulkanUtils.VEC2_SIZE *3, + PushConstBuffer.slice(VulkanUtils.VEC2_SIZE * 3,VulkanUtils.FLOAT_SIZE)); + vkCmdPushConstants(CmdHandle, VkPipeline.GetVulkanPipelineLayout(), VK_SHADER_STAGE_FRAGMENT_BIT, VulkanUtils.VEC2_SIZE * 3 + VulkanUtils.FLOAT_SIZE, + PushConstBuffer.slice(VulkanUtils.VEC2_SIZE* 3 + VulkanUtils.FLOAT_SIZE, VulkanUtils.INT_SIZE)); } @@ -301,7 +305,7 @@ public class SpriteRenderer { ForwardRender(engineInstance,vulkanContext,commandBuffer,modelsCache,SrcAttachment,CurrentFrame); } - public static final Vector2f ScreenSize = new Vector2f(3440,1440); + public static final Vector2f ScreenSize = new Vector2f(1720,720); private void RenderActors(EngineInstance instance, VkCommandBuffer CommandHandle, ModelsCache modelsCache, boolean Transparent, Pipeline pipeline){ try(var MemStack = MemoryStack.stackPush()){ @@ -314,12 +318,13 @@ public class SpriteRenderer { if(i < Sprites.size()) { var Actor = Sprites.get(i); if(Actor != null) { + if(Objects.equals(Actor.GetModelID(), "TO_BE_FULFILLED_LATER"))continue; VulkanModel model = modelsCache.GetModel(Actor.GetModelID()); List VkMeshList = model.GetVkMeshList(); int MeshCount = VkMeshList.size(); for (int j = 0; j < MeshCount; j++) { var VkMesh = VkMeshList.get(j); - SetPushConstants(CommandHandle, ScreenSize, Actor.GetScale(), Actor.GetPosition(),Actor.GetTexturePosition(),pipeline); + SetPushConstants(CommandHandle, ScreenSize, Actor.GetCameraZValue(), Actor.GetScale(), Actor.GetPosition(),Actor.GetTexturePosition(),pipeline); vertexBuffer.put(0, VkMesh.VerticesBuffer().GetBuffer()); vkCmdBindVertexBuffers(CommandHandle, 0, vertexBuffer, offsets); vkCmdBindIndexBuffer(CommandHandle, VkMesh.IndicesBuffer().GetBuffer(), 0, VK_INDEX_TYPE_UINT32); diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/SpriteRendering/SpriteVertexBufferStructure.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/SpriteRendering/SpriteVertexBufferStructure.java similarity index 94% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/SpriteRendering/SpriteVertexBufferStructure.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/SpriteRendering/SpriteVertexBufferStructure.java index fc68a85..ca8e497 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/SpriteRendering/SpriteVertexBufferStructure.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/SpriteRendering/SpriteVertexBufferStructure.java @@ -1,6 +1,6 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.SpriteRendering; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.SpriteRendering; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.lwjgl.vulkan.VkPipelineVertexInputStateCreateInfo; import org.lwjgl.vulkan.VkVertexInputAttributeDescription; import org.lwjgl.vulkan.VkVertexInputBindingDescription; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/SpriteRendering/TextureAlphaBounds.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/SpriteRendering/TextureAlphaBounds.java similarity index 95% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/SpriteRendering/TextureAlphaBounds.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/SpriteRendering/TextureAlphaBounds.java index a326a2b..015b9c1 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/SpriteRendering/TextureAlphaBounds.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/SpriteRendering/TextureAlphaBounds.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.SpriteRendering; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.SpriteRendering; import java.nio.ByteBuffer; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/CommandBuffer.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/CommandBuffer.java similarity index 92% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/CommandBuffer.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/CommandBuffer.java index 9653cba..c668b35 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/CommandBuffer.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/CommandBuffer.java @@ -1,8 +1,8 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.GPUSynchronisation.Fence; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Queues.Queue; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.GPUSynchronisation.Fence; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Queues.Queue; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; @@ -10,7 +10,7 @@ import org.tinylog.Logger; import java.nio.IntBuffer; -import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck; +import static net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils.vkCheck; import static org.lwjgl.vulkan.VK13.*; public class CommandBuffer { private final boolean OneTimeSubmit; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/CommandPool.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/CommandPool.java similarity index 89% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/CommandPool.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/CommandPool.java index d4527b2..62d286a 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/CommandPool.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/CommandPool.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkCommandPoolCreateInfo; @@ -6,7 +6,7 @@ import org.tinylog.Logger; import java.nio.LongBuffer; -import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck; +import static net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils.vkCheck; import static org.lwjgl.vulkan.VK13.*; public class CommandPool { private final long VulkanCommandPool; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/Device.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/Device.java similarity index 92% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/Device.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/Device.java index f5d4a2c..517b02c 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/Device.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/Device.java @@ -1,7 +1,8 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers; +import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; @@ -14,7 +15,7 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.Set; -import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck; +import static net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils.vkCheck; import static org.lwjgl.vulkan.KHRPortabilitySubset.VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME; import static org.lwjgl.vulkan.VK13.*; @@ -129,7 +130,9 @@ public class Device { } public void waitIdle(){ - vkDeviceWaitIdle(VulkanDevice); + if (this.VulkanDevice != null && this.VulkanDevice.address() != 0) { + vkDeviceWaitIdle(VulkanDevice); + } } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/GPUSynchronisation/Fence.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/GPUSynchronisation/Fence.java similarity index 89% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/GPUSynchronisation/Fence.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/GPUSynchronisation/Fence.java index c2b02ba..bd4e55c 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/GPUSynchronisation/Fence.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/GPUSynchronisation/Fence.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.GPUSynchronisation; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.GPUSynchronisation; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; import org.lwjgl.system.MemoryStack; @@ -6,7 +6,7 @@ import org.lwjgl.vulkan.VkFenceCreateInfo; import java.nio.LongBuffer; -import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck; +import static net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils.vkCheck; import static org.lwjgl.vulkan.VK13.vkResetFences; import static org.lwjgl.vulkan.VK13.vkWaitForFences; import static org.lwjgl.vulkan.VK13.vkDestroyFence; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/GPUSynchronisation/Semaphore.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/GPUSynchronisation/Semaphore.java similarity index 85% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/GPUSynchronisation/Semaphore.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/GPUSynchronisation/Semaphore.java index 471532f..6809e82 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/GPUSynchronisation/Semaphore.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/GPUSynchronisation/Semaphore.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.GPUSynchronisation; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.GPUSynchronisation; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; import org.lwjgl.system.MemoryStack; @@ -7,7 +7,7 @@ import org.tinylog.Logger; import java.nio.LongBuffer; -import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck; +import static net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils.vkCheck; import static org.lwjgl.vulkan.VK13.vkCreateSemaphore; import static org.lwjgl.vulkan.VK13.vkDestroySemaphore; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/GPUSynchronisation/TransferBuffer.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/GPUSynchronisation/TransferBuffer.java similarity index 69% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/GPUSynchronisation/TransferBuffer.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/GPUSynchronisation/TransferBuffer.java index a696877..8a63408 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/GPUSynchronisation/TransferBuffer.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/GPUSynchronisation/TransferBuffer.java @@ -1,7 +1,7 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.GPUSynchronisation; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.GPUSynchronisation; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkBufferCopy; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/PhysicalDevice.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/PhysicalDevice.java similarity index 96% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/PhysicalDevice.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/PhysicalDevice.java index a793be2..f9696a5 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/PhysicalDevice.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/PhysicalDevice.java @@ -1,8 +1,8 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.VulkanInstance; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.VulkanInstance; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; @@ -13,7 +13,7 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.Set; -import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck; +import static net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils.vkCheck; import static org.lwjgl.vulkan.EXTMemoryBudget.VK_EXT_MEMORY_BUDGET_EXTENSION_NAME; import static org.lwjgl.vulkan.VK13.*; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/Queues/Queue.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/Queues/Queue.java similarity index 93% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/Queues/Queue.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/Queues/Queue.java index 277fc09..c22a2ce 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/Queues/Queue.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DeviceLayers/Queues/Queue.java @@ -1,7 +1,7 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Queues; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Queues; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.GPUSynchronisation.Fence; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.GPUSynchronisation.Fence; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; @@ -9,7 +9,7 @@ import org.tinylog.Logger; import java.nio.IntBuffer; -import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck; +import static net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils.vkCheck; import static org.lwjgl.vulkan.VK13.*; public class Queue { diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DisplayToScreen/DeferredSceneRender.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DisplayToScreen/DeferredSceneRender.java similarity index 95% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DisplayToScreen/DeferredSceneRender.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DisplayToScreen/DeferredSceneRender.java index ad3030a..c338a6b 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DisplayToScreen/DeferredSceneRender.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DisplayToScreen/DeferredSceneRender.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; @@ -7,21 +7,20 @@ import net.halbear.Terrain4J.EngineCore.Main.Scene.Actor; import net.halbear.Terrain4J.EngineCore.Main.Scene.ActorElement; import net.halbear.Terrain4J.EngineCore.Main.Scene.IScene; import net.halbear.Terrain4J.EngineCore.Threads.ClientConnectionThread; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.DeferredRendering.MultiRenderTargetAttachments; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.DynamicMesh.DynamicTerrainMesh; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.DefaultPipeline; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.*; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Pipeline; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.PipelineBuildInfo; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.PushConstantsRange; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.*; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VertexBufferStructure; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.*; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.SwapChain.SwapChain; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.DeferredRendering.MultiRenderTargetAttachments; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.DefaultPipeline; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.*; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Pipeline; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.PipelineBuildInfo; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.PushConstantsRange; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader.*; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VertexBufferStructure; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.*; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Device; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.SwapChain.SwapChain; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.joml.Matrix4f; import org.joml.Vector3f; import org.lwjgl.system.MemoryStack; @@ -34,7 +33,6 @@ import java.nio.ByteBuffer; import java.nio.LongBuffer; import java.util.*; -import static org.lwjgl.system.MemoryUtil.memAllocLong; import static org.lwjgl.system.MemoryUtil.memFree; import static org.lwjgl.vulkan.VK13.*; @@ -418,7 +416,7 @@ public class DeferredSceneRender implements SceneRenderer {//dynamic rendering for(int i = 0; i < ActorCount; i++){ if(i < Actors.size()) { var Actor = Actors.get(i); - if(Actor != null) { + if(Actor != null && Actor.GetPosition() != null) { if(Actor instanceof ActorElement &&( !((ActorElement) Actor).RenderOnTopOfPlayer && Objects.equals(((ActorElement) Actor).GetParentID(), ClientConnectionThread.OwnedActorID) || new Vector3f().set(Actor.GetPosition()).sub(instance.scene().GetCamera().GetPosition()).absolute().lengthSquared() < 4f)) continue; else { VulkanModel model = modelsCache.GetModel(Actor.GetModelID()); diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DisplayToScreen/ForwardSceneRender.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DisplayToScreen/ForwardSceneRender.java similarity index 95% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DisplayToScreen/ForwardSceneRender.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DisplayToScreen/ForwardSceneRender.java index d2f9bb6..22bd847 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DisplayToScreen/ForwardSceneRender.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DisplayToScreen/ForwardSceneRender.java @@ -1,4 +1,4 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; @@ -7,22 +7,21 @@ import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; import net.halbear.Terrain4J.EngineCore.Main.Scene.Actor; import net.halbear.Terrain4J.EngineCore.Main.Scene.ActorElement; import net.halbear.Terrain4J.EngineCore.Main.Scene.IScene; -import net.halbear.Terrain4J.EngineCore.Main.Scene.Scene; import net.halbear.Terrain4J.EngineCore.Threads.ClientConnectionThread; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.DeferredRendering.MultiRenderTargetAttachments; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.DefaultPipeline; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.*; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Pipeline; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.PipelineBuildInfo; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.PushConstantsRange; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.*; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VertexBufferStructure; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.*; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.SwapChain.SwapChain; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.DeferredRendering.MultiRenderTargetAttachments; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.DefaultPipeline; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.*; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Pipeline; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.PipelineBuildInfo; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.PushConstantsRange; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader.*; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VertexBufferStructure; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.*; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Device; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.SwapChain.SwapChain; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.joml.Matrix4f; import org.joml.Vector3f; import org.lwjgl.system.MemoryStack; @@ -33,7 +32,6 @@ import org.tinylog.Logger; import java.nio.ByteBuffer; import java.nio.LongBuffer; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DisplayToScreen/ImageView.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DisplayToScreen/ImageView.java similarity index 90% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DisplayToScreen/ImageView.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DisplayToScreen/ImageView.java index cecd49b..d4567a3 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DisplayToScreen/ImageView.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DisplayToScreen/ImageView.java @@ -1,13 +1,13 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Device; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkImageViewCreateInfo; import org.tinylog.Logger; import java.nio.LongBuffer; -import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck; +import static net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils.vkCheck; import static org.lwjgl.vulkan.VK13.*; public class ImageView { @@ -42,7 +42,7 @@ public class ImageView { } public void cleanup(Device device){ - Logger.debug("Destroying Image View"); + //Logger.debug("Destroying Image View"); vkDestroyImageView(device.FetchVulkanDevice(), VulkanImageView, null); } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DisplayToScreen/SceneRenderer.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DisplayToScreen/SceneRenderer.java new file mode 100644 index 0000000..7015f80 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DisplayToScreen/SceneRenderer.java @@ -0,0 +1,21 @@ +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen; + +import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; +import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.DeferredRendering.MultiRenderTargetAttachments; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.Attachment; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.TextureCache; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.MaterialsCache; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.VkModel.ModelsCache; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandBuffer; + +public interface SceneRenderer { + + public void Render(EngineInstance engineInstance, VulkanContext vulkanContext, CommandBuffer commandBuffer, ModelsCache modelsCache, MaterialsCache materialsCache, int CurrentFrame); + public void Resize(EngineInstance instance, VulkanContext VkCtx); + public void LoadMaterials(VulkanContext VkCtx, MaterialsCache materialsCache, TextureCache textureCache); + public void cleanup(VulkanContext VkCtx); + public MultiRenderTargetAttachments GetMRTAttachments(); + public Attachment GetAttachmentColour(); + public void RebuildPipelines(VulkanContext VkCtx); +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DisplayToScreen/Surface.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DisplayToScreen/Surface.java similarity index 90% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DisplayToScreen/Surface.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DisplayToScreen/Surface.java index 52ea5a1..74a69e7 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DisplayToScreen/Surface.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/DisplayToScreen/Surface.java @@ -1,9 +1,9 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen; import net.halbear.Terrain4J.EngineCore.Display.Window; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.PhysicalDevice; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.VulkanInstance; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.PhysicalDevice; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.VulkanInstance; import org.lwjgl.glfw.GLFWVulkan; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.KHRSurface; @@ -14,9 +14,8 @@ import org.tinylog.Logger; import java.nio.IntBuffer; import java.nio.LongBuffer; -import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck; +import static net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils.vkCheck; import static org.lwjgl.vulkan.VK10.VK_FORMAT_B8G8R8A8_UNORM; -import static org.lwjgl.vulkan.VK13.VK_FORMAT_B8G8R8A8_SRGB; public class Surface { private final VkSurfaceCapabilitiesKHR SurfaceCapabilities; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/SwapChain/SwapChain.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/SwapChain/SwapChain.java similarity index 91% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/SwapChain/SwapChain.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/SwapChain/SwapChain.java index 10b5f03..6e57047 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/SwapChain/SwapChain.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/SwapChain/SwapChain.java @@ -1,12 +1,12 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Structure.SwapChain; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.SwapChain; import net.halbear.Terrain4J.EngineCore.Display.Window; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.GPUSynchronisation.Semaphore; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Queues.Queue; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.ImageView; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.Surface; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Device; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.GPUSynchronisation.Semaphore; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Queues.Queue; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.ImageView; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.Surface; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.*; @@ -16,7 +16,7 @@ import java.nio.IntBuffer; import java.nio.LongBuffer; import java.util.Arrays; -import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck; +import static net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils.vkCheck; import static org.lwjgl.vulkan.KHRSurface.VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; import static org.lwjgl.vulkan.VK13.*; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/SwapChain/SwapChainRender.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/SwapChain/SwapChainRender.java similarity index 92% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/SwapChain/SwapChainRender.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/SwapChain/SwapChainRender.java index 3db2ed4..86d40a8 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/SwapChain/SwapChainRender.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/SwapChain/SwapChainRender.java @@ -1,16 +1,16 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Structure.SwapChain; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.SwapChain; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.EmptyVertexBufferStruct; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.DefaultPipeline; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.Attachment; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Pipeline; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.PipelineBuildInfo; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.*; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.EmptyVertexBufferStruct; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.DefaultPipeline; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Images.Attachment; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.Pipeline; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Pipeline.PipelineBuildInfo; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader.*; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.CommandBuffer; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Device; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.lwjgl.system.MemoryStack; import org.lwjgl.util.shaderc.Shaderc; import org.lwjgl.vulkan.*; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/VulkanInstance.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/VulkanInstance.java similarity index 97% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/VulkanInstance.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/VulkanInstance.java index c801f42..b8f0817 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/VulkanInstance.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Structure/VulkanInstance.java @@ -1,7 +1,7 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Structure; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.lwjgl.PointerBuffer; import org.lwjgl.glfw.GLFWVulkan; import org.lwjgl.system.MemoryStack; @@ -17,7 +17,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck; +import static net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils.vkCheck; import static org.lwjgl.vulkan.EXTDebugUtils.*; import static org.lwjgl.vulkan.VK13.*; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Util/VulkanBuffer.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Util/VulkanBuffer.java similarity index 88% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Util/VulkanBuffer.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Util/VulkanBuffer.java index 3fb1fba..3abb8c6 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Util/VulkanBuffer.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Util/VulkanBuffer.java @@ -1,21 +1,15 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Util; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.lwjgl.util.vma.VmaAllocationCreateInfo; -import org.lwjgl.util.vma.VmaAllocatorCreateInfo; import org.lwjgl.vulkan.VkBufferCreateInfo; -import org.lwjgl.vulkan.VkDevice; -import org.lwjgl.vulkan.VkMemoryAllocateInfo; -import org.lwjgl.vulkan.VkMemoryRequirements; -import org.tinylog.Logger; import java.nio.LongBuffer; -import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck; +import static net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils.vkCheck; import static org.lwjgl.system.MemoryUtil.NULL; import static org.lwjgl.util.vma.Vma.*; import static org.lwjgl.vulkan.VK13.*; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Util/VulkanMemoryAllocator.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Util/VulkanMemoryAllocator.java similarity index 77% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Util/VulkanMemoryAllocator.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Util/VulkanMemoryAllocator.java index dff0e07..23cc8ac 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Util/VulkanMemoryAllocator.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Util/VulkanMemoryAllocator.java @@ -1,14 +1,14 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Util; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.PhysicalDevice; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.VulkanInstance; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Device; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.PhysicalDevice; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.VulkanInstance; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.util.vma.VmaAllocatorCreateInfo; import org.lwjgl.util.vma.VmaVulkanFunctions; -import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck; +import static net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils.vkCheck; import static org.lwjgl.util.vma.Vma.vmaCreateAllocator; import static org.lwjgl.util.vma.Vma.vmaDestroyAllocator; import static org.lwjgl.vulkan.VK13.VK_API_VERSION_1_3; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Util/VulkanUtils.java b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Util/VulkanUtils.java similarity index 96% rename from src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Util/VulkanUtils.java rename to src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Util/VulkanUtils.java index ee9cb27..83f3e41 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Util/VulkanUtils.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/RenderingAPI/Vulkan/Util/VulkanUtils.java @@ -1,12 +1,12 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Util; +package net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.DynamicMesh.DeferredResource; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.DescriptorAllocator; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.DescriptorSet; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.DescriptorSetLayout; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.DynamicMesh.DeferredResource; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader.DescriptorAllocator; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader.DescriptorSet; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Rendering.Shader.DescriptorSetLayout; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DeviceLayers.Device; import org.joml.Matrix4f; import org.joml.Vector2f; import org.lwjgl.system.MemoryStack; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/ClientSession.java b/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/ClientSession.java new file mode 100644 index 0000000..1a39d7b --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/ClientSession.java @@ -0,0 +1,311 @@ +package net.halbear.Terrain4J.EngineCore.ServerNetworking; + +import net.halbear.Executable.Server; +import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; +import net.halbear.Terrain4J.EngineCore.Main.GameCore; +import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; +import net.halbear.Terrain4J.EngineCore.Main.Scene.Actor; +import net.halbear.Terrain4J.EngineCore.Main.Scene.IScene; +import net.halbear.Terrain4J.EngineCore.Main.Scene.PlayerActor; +import org.tinylog.Logger; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.SocketChannel; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import java.util.Queue; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedQueue; + +import static net.halbear.Terrain4J.EngineCore.ServerNetworking.ServerSideNetworkUtils.*; +import static net.halbear.Terrain4J.EngineCore.ServerNetworking.ServerSideNetworkUtils.BroadcastCreateActorPacket; +import static net.halbear.Terrain4J.EngineCore.ServerNetworking.ServerSideNetworkUtils.CreateActorPacket; + +public class ClientSession implements ServerConnection { + private static final Queue PendingClients = new ConcurrentLinkedQueue<>(); + private static final Map ClientSessions = new ConcurrentHashMap<>(); + private static final Map ClientMacAddressCache = new ConcurrentHashMap<>(); + private static final Map ClientSessionInstances = new ConcurrentHashMap<>(); + + public static ClientSession GetClientSessionInstance(UUID uuid){ + if(ClientSessionInstances.containsKey(uuid)){ + return ClientSessionInstances.get(uuid); + } + return null; + } + + public static UUID GetClientUUID_FromMacAddress(String Address){ + if(ClientMacAddressCache.containsKey(Address)){ + return ClientMacAddressCache.get(Address); + } + return null; + } + + public static ClientSession GetValidClientSession(UUID ClientUUID){ + if(ClientSessions.containsKey(ClientUUID)){ + return ClientSessions.get(ClientUUID); + } + return null; + } + + public static Queue GetPendingClients(){return PendingClients;} + public static Map GetClientSessionInstances(){return ClientSessionInstances;} + public static Map GetClientMacAddressCache(){return ClientMacAddressCache;} + public static Map GetValidClientSessions(){return ClientSessions;} + + private final Queue InboundPacketQueue = new ConcurrentLinkedQueue<>(); + private final Queue OutboundPacketQueue = new ConcurrentLinkedQueue<>(); + public final ByteBuffer InBound = ByteBuffer.allocateDirect(1024 * 4); + public final Queue OutBound = new ConcurrentLinkedQueue<>(); + private final Map NetworkOwnedActors = new ConcurrentHashMap<>(); + private final SocketChannel Channel; + private String ClientName; + private String IPAddress; + private UUID ClientUUID; + private final UUID InstanceUUID; + private IP_MODIFIER IPModifier; + private boolean Validated = false; + private boolean CheckedUUID_Cache = false; + private Selector connectionSelector; + private SelectionKey selectionKey; + + public static void HandOutPacket(Packet packet){ + ClientSessions.forEach((uuid, session)->{ + session.QueueWritePacket(packet); + }); + } + + public static void ProcessOutboundPackets(){ + ClientSessions.forEach((uuid, session)->{ + while (!session.OutboundPacketQueue.isEmpty()){ + session.QueueWritePacket(session.OutboundPacketQueue.poll()); + } + }); + PendingClients.forEach(session -> { + while (!session.OutboundPacketQueue.isEmpty()){ + session.QueueWritePacket(session.OutboundPacketQueue.poll()); + } + }); + } + public boolean OwnsActor(String ActorID){ + return NetworkOwnedActors.containsKey(ActorID); + } + + public void CollectIncomingPackets(Queue ReferenceList){ + Packet packet; + while((packet = InboundPacketQueue.poll()) != null) { + ReferenceList.add(packet); + } + } + + + public UUID GetInstanceUUID(){return InstanceUUID;} + public UUID GetClientUUID(){return InstanceUUID;} + + public ClientSession(SocketChannel channel, IP_MODIFIER modifier, Selector connectionSelector, SelectionKey selectionKey) { + this.Channel = channel; + this.IPModifier = modifier; + this.connectionSelector = connectionSelector; + this.selectionKey = selectionKey; + this.InstanceUUID = UUID.randomUUID(); + ClientSessionInstances.put(this.InstanceUUID,this); + } + + public boolean IsValidated(){ + return Validated; + } + + public static void QueryPendingClients(){ + if(PendingClients.isEmpty()) return; + for(int i = 0; i < PendingClients.size(); i++){ + ClientSession Pending = PendingClients.peek(); + if(Pending.IsValidated()){ + ClientSession session = PendingClients.poll(); + if(session == null) continue; + session.InitialiseJoinedClient(); + ClientSessions.put(session.ClientUUID,session); + continue; + } + Pending.PeekPacketQueue(); + } + } + + public void PeekPacketQueue(){ + InboundPacketQueue.forEach((this::QueryClientValidity)); + } + + public void SendPossessActorPacket(String actorID) { + Packet packet = new Packet((byte) 8); + packet.SetTargetType((byte) 0); + packet.SetData(new byte[0]); + packet.SetID(actorID); + AddOutgoingPacket(packet); + } + + public void AddOutgoingPacket(Packet outgoingPacket){ + OutboundPacketQueue.add(outgoingPacket); + } + + protected void InitialiseJoinedClient(){ + Packet PlayerCountPacket = CreatePlayerCountPacket(Server.ConnectedClients.size()); + Server.OutGoingPacketQueue.add(PlayerCountPacket); + EngineInstance engineInstance = PrimaryRuntime.GetEngineInstance(); + IScene scene = engineInstance.scene(); + + for(Actor actor : scene.GetActors()) { + Packet actorPacket = CreateActorPacket(actor); + if(actorPacket != null) { + AddOutgoingPacket(actorPacket); + } + } + + Server.ClientNames.forEach((client, name) -> AddOutgoingPacket(CreateUsernameUpdatePacket(client, name))); + + GameCore gameCore = (GameCore) PrimaryRuntime.GetGameCore(); + PlayerActor player = gameCore.SpawnNetworkPlayer(engineInstance, ClientUUID); + + SetOwnedActorID(player.GetID()); + + Packet playerCreatePacket = CreateActorPacket(player); + if(playerCreatePacket != null) { + AddOutgoingPacket(playerCreatePacket); + Logger.debug("Queued direct create packet for joining player's actor: " + player.GetID()); + } + + BroadcastCreateActorPacket(player); + SendPossessActorPacket(player.GetID()); + Packet UUIDUpdatePacket = CreatePlayerUUIDPacket(ClientUUID,this); + Server.OutGoingPacketQueue.add(UUIDUpdatePacket); + Logger.debug("Queued possess packet for joining player's actor: " + player.GetID()); + } + + public void SetOwnedActorID(String ownedActorID){ + if(Actor.Actors.containsKey(ownedActorID)) { + this.NetworkOwnedActors.put(ownedActorID, Actor.Actors.get(ownedActorID)); + } + } + + public void QueryClientValidity(Packet Inbound){ + if(Inbound.PacketTypeByte == Packet.QUERY_MAC_ADDRESS){ + String Data = Packet.DecodeAsString(Inbound.Data); + if(ClientMacAddressCache.containsKey(Data)){ + UUID clientUUID = ClientMacAddressCache.get(Data); + ClientSessions.put(clientUUID,PendingClients.poll()); + OutboundPacketQueue.add(new Packet(Packet.PACKET_ASSIGN_UUID).SetData(Packet.EncodeString(clientUUID.toString())).SetID(clientUUID.toString())); + CheckedUUID_Cache = true; + Validated = true; + return; + } + CheckedUUID_Cache = true; + } + if (Inbound.PacketTypeByte == Packet.QUERY_CLIENT_UUID && !Validated){ + String Data = Packet.DecodeAsString(Inbound.Data); + ClientUUID = null; + try{ + UUID newUUID = UUID.fromString(Data); + if(ClientSessions.containsKey(newUUID) || ClientMacAddressCache.containsKey(Data)){ + Validated = false; + UUID AssignUUID = UUID.randomUUID(); + OutboundPacketQueue.add(new Packet(Packet.PACKET_ASSIGN_UUID).SetData(Packet.EncodeString(AssignUUID.toString())).SetID(AssignUUID.toString())); + } else{ + Validated = CheckedUUID_Cache; + ClientUUID = newUUID; + } + } + catch (IllegalArgumentException e){ + + } + } + } + + public void Clear() { + InBound.clear(); + OutBound.clear(); + } + + public void CloseChannel(){ + try { Channel.close(); } catch (IOException ignored) {} + } + + public void CleanUp(){ + Clear(); + CloseChannel(); + } + + public void ProcessIncomingPacket() { + InBound.flip(); + while (true) { + if (InBound.remaining() < 6) { + break; + } + InBound.mark(); + + byte packetTypeByte = InBound.get(); + byte targetType = InBound.get(); + int dataLength = InBound.getInt(); + + if (InBound.remaining() < dataLength + 4) { + InBound.reset(); + break; + } + + int currentPosition = InBound.position(); + InBound.position(currentPosition + dataLength); + int idLength = InBound.getInt(); + InBound.position(currentPosition); + + if (InBound.remaining() < dataLength + 4 + idLength) { + InBound.reset(); + break; + } + + Packet newIncomingPacket = new Packet(packetTypeByte); + newIncomingPacket.SetTargetType(targetType); + + byte[] incomingData = new byte[dataLength]; + InBound.get(incomingData); + newIncomingPacket.Data = incomingData; + + InBound.getInt(); + byte[] idData = new byte[idLength]; + InBound.get(idData); + String id = new String(idData, StandardCharsets.UTF_8); + newIncomingPacket.SetID(id); + InboundPacketQueue.add(newIncomingPacket); + } + + InBound.compact(); + } + + public void QueueWritePacket(Packet outPacket) { + if (outPacket.PacketTypeByte == Packet.PACKET_UPDATE_MODEL_ID) { + Logger.debug("Queueing model ID update packet for actor [{}]", outPacket.TargetID); + } + + byte[] dataToSend = Packet.GetOutgoingData(outPacket); + ByteBuffer buffer = ByteBuffer.wrap(dataToSend); + OutBound.add(buffer); + selectionKey.interestOps(selectionKey.interestOps() | SelectionKey.OP_WRITE); + connectionSelector.wakeup(); + } + + public void FlushOutboundData(SelectionKey key) throws IOException { + SocketChannel channel = (SocketChannel) key.channel(); + + while (!OutBound.isEmpty()) { + ByteBuffer buffer = OutBound.peek(); + channel.write(buffer); + + if (buffer.hasRemaining()) { + return; + } + OutBound.poll(); + } + + key.interestOps(key.interestOps() & ~SelectionKey.OP_WRITE); + } +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/ClientSideNetworkUtils.java b/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/ClientSideNetworkUtils.java new file mode 100644 index 0000000..a832ac2 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/ClientSideNetworkUtils.java @@ -0,0 +1,460 @@ +package net.halbear.Terrain4J.EngineCore.ServerNetworking; + +import net.halbear.Executable.Server; +import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; +import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; +import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.ConvexMesh; +import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidBody; +import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidPhysicsController; +import net.halbear.Terrain4J.EngineCore.Main.AudioInstance; +import net.halbear.Terrain4J.EngineCore.Main.GameCore; +import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; +import net.halbear.Terrain4J.EngineCore.Main.Scene.*; +import net.halbear.Terrain4J.EngineCore.Threads.ClientConnectionThread; +import org.joml.Quaternionf; +import org.joml.Vector3f; +import org.tinylog.Logger; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.time.Instant; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedQueue; + +public class ClientSideNetworkUtils { + + public static Map GameChats = new LinkedHashMap<>(); + public static final Queue OutGoingPacketQueue = new ConcurrentLinkedQueue<>(); + public static final Queue IncomingPacketQueue = new ConcurrentLinkedQueue<>(); + + public static boolean Connected = false; + public static boolean pinging = false; + public static String ServerIP = "localhost"; + public static String ServerMessage = "Offline"; + public static String clientUUID = null; + private static final Map NetworkOwnedActors = new ConcurrentHashMap<>(); + private static String PlayerControlledActorID = null; + @Deprecated + public static String OwnedActorID = "NULL"; + public static String PendingPossessActorID = "NULL"; + public static int PlayersOnline = 0; + + public static boolean IsPlayerControlledActor(String actorID){ + return PlayerControlledActorID.equals(actorID); + } + + + public static void SetReconnectingStatus(boolean Reconnect){ + ClientSideNetworkUtils.Reconnect = Reconnect; + } + + public static boolean IsReconnecting(){return Reconnect;} + + public static Map GetNetworkOwnedActors(){ + return NetworkOwnedActors; + } + public static String GetPlayerControlledActorID(){ + return PlayerControlledActorID; + } + + public static boolean OwnsActor(String ActorID){ + if(NetworkOwnedActors.containsKey(ActorID)) + return true; + return false; + } + + private static boolean TryPossessActor(String actorID, GameCore gameCore, IScene scene){ + Actor actor = Actor.Actors.get(actorID); + + if(!(actor instanceof PlayerActor playerActor)) { + PendingPossessActorID = actorID; + Logger.info("Possess actor [{}] is not created yet. Deferring possession.", actorID); + return false; + } + + if(!(scene instanceof Scene concreteScene)) { + PendingPossessActorID = actorID; + Logger.warn("Cannot possess actor [{}] because scene is not a Scene instance", actorID); + return false; + } + + Camera debugCamera = concreteScene.GetCamera(); + if(debugCamera == null) { + PendingPossessActorID = actorID; + Logger.warn("Cannot possess actor [{}] because DebugCamera is missing", actorID); + return false; + } + + NetworkOwnedActors.put(actorID, actor); + OwnedActorID = actorID; + PlayerControlledActorID = actorID; + PendingPossessActorID = "NULL"; + + playerActor.AttachCamera(debugCamera.GetID()); + concreteScene.SetNetworkControlledPlayer(playerActor); + gameCore.SetPlayerActorID(actorID); + + Logger.info( + "Client now controls server actor [{}], attached camera [{}]", + actorID, + debugCamera.GetID() + ); + + return true; + } + + public static final Map BypassNullTargets = new HashMap<>(); + + static{ + BypassNullTargets.put(Packet.PACKET_CREATE_ACTOR, true); + BypassNullTargets.put(Packet.PACKET_PING, true); + BypassNullTargets.put(Packet.PACKET_POSSESS_ACTOR, true); + BypassNullTargets.put(Packet.PACKET_DESTROY_ACTOR, true ); + BypassNullTargets.put(Packet.PACKET_ASSIGN_UUID, true ); + BypassNullTargets.put(Packet.PACKET_SEND_PLAYER_COUNT, true ); + BypassNullTargets.put(Packet.PACKET_FIRE_RESULT, true); + BypassNullTargets.put(Packet.GAME_CHAT_DATA_PACKET, true); + BypassNullTargets.put(Packet.PACKET_UPDATE_PLAYER_DISPLAY_NAME, true); + } + + public static void DecodePackets(EngineInstance engineInstance, GameCore gameCore, IScene scene){ + if(!IncomingPacketQueue.isEmpty()){ + // Logger.debug("Decoding packets"); + Packet packet; + while((packet = IncomingPacketQueue.poll()) != null){ + // Logger.debug("Packet: " + packet.PacketTypeByte); + Actor Target = Actor.Actors.get(packet.TargetID); + Vector3f vector3f = new Vector3f(); + String stringdata = ""; + Quaternionf quaternionfdata = new Quaternionf(); + Packet.DecodedMovementPacket MovementUpdate; + if(packet.PacketTypeByte >= 0 && packet.PacketTypeByte < 4 && packet.PacketTypeByte != 1){ + vector3f = Packet.DecodeAsVector3f(packet.Data); + } + + if(Target == null && + (!BypassNullTargets.containsKey(packet.PacketTypeByte) || !BypassNullTargets.get(packet.PacketTypeByte))) { + continue; + } + + switch (packet.PacketTypeByte) { + case Packet.PACKET_UPDATE_LOCATION: + Target.SetNewPosition(vector3f); + break; + case Packet.PACKET_UPDATE_ROTATION: + quaternionfdata = Packet.DecodeAsQuaternation(packet.Data); + Target.SetNewRotation(quaternionfdata); + break; + case Packet.PACKET_UPDATE_LINEAR_VELOCITY: + Target.SetNewVelocity(vector3f); + break; + case Packet.PACKET_UPDATE_ANGULAR_VELOCITY: + Target.SetNewAngularVelocity(vector3f); + break; + case Packet.PACKET_CREATE_ACTOR: //"ACtorType:ModelID:x:y:z:rx:ry:rz:sx:sy:sz:hx:hy:hz:MassKG:vx:vy:vz:avx:avy:avz:posOffx:posOffy:posOffz:camOffx:camOffy:camOffz" + try { + stringdata = Packet.DecodeAsString(packet.Data); + String[] Split = stringdata.split(":"); + + if(Split.length < 22) { + Logger.error("Create actor packet [{}] has too few fields: [{}] data=[{}]", packet.TargetID, Split.length, stringdata); + break; + } + Vector3f Position = new Vector3f( + Float.parseFloat(Split[2]), + Float.parseFloat(Split[3]), + Float.parseFloat(Split[4]) + ); + + Quaternionf Rotation = new Quaternionf( + Float.parseFloat(Split[5]), + Float.parseFloat(Split[6]), + Float.parseFloat(Split[7]), + Float.parseFloat(Split[8]) + ); + + Vector3f Scale = new Vector3f( + Float.parseFloat(Split[9]), + Float.parseFloat(Split[10]), + Float.parseFloat(Split[11]) + ); + + Vector3f CollisionBox = new Vector3f( + Float.parseFloat(Split[12]), + Float.parseFloat(Split[13]), + Float.parseFloat(Split[14]) + ); + + float MassKG = Float.parseFloat(Split[15]); + + Vector3f Velocity = new Vector3f( + Float.parseFloat(Split[16]), + Float.parseFloat(Split[17]), + Float.parseFloat(Split[18]) + ); + + Vector3f AngularVelocity = new Vector3f( + Float.parseFloat(Split[19]), + Float.parseFloat(Split[20]), + Float.parseFloat(Split[21]) + ); + + Vector3f PositionOffset = new Vector3f(); + if(Split.length >= 25) { + PositionOffset.set( + Float.parseFloat(Split[22]), + Float.parseFloat(Split[23]), + Float.parseFloat(Split[24]) + ); + } + + Vector3f CameraOffset = new Vector3f(0, 1.0f, 0); + if(Split.length >= 28) { + CameraOffset.set( + Float.parseFloat(Split[25]), + Float.parseFloat(Split[26]), + Float.parseFloat(Split[27]) + ); + } + + String actorType = Split[0]; + String modelID = Split[1]; + if (actorType.equals("PlayerActor")) { + Target = new PlayerActor("NULL", packet.TargetID, modelID, Position).SetCameraOffset(CameraOffset); + Target.SetPositionOffset(PositionOffset); + } else { + Target = new Actor(packet.TargetID, modelID, Position); + } + + Target.SetScale(Scale); + Target.CreatePhysicsController(ConvexMesh.Box(CollisionBox.x, CollisionBox.y, CollisionBox.z), MassKG); + Target.SetServerSynced(MassKG > 0.0f || actorType.equals("PlayerActor")); + + Target.SetNewRotation(Rotation); + + RigidPhysicsController physicsController = (RigidPhysicsController) Target.GetPhysicsController(); + + + RigidBody rigidBody = RigidBody.RigidBodyRegister.get(physicsController.RigidBodyID); + if (rigidBody != null) { + rigidBody.LinearVelocity.set(Velocity); + rigidBody.AngularVelocity.set(AngularVelocity); + if(actorType.equals("PlayerActor")){ + rigidBody.LockRotation(); + } + } + + scene.AddActor(Target); + scene.NetworkedActors().add(Target.GetID()); + + if(packet.TargetID.equals(PendingPossessActorID)) { + TryPossessActor(packet.TargetID, gameCore, scene); + } + + } catch (Exception e) { + Logger.error(e, "Failed to decode create actor packet for actor [{}]", packet.TargetID); + } + break; + case Packet.PACKET_MOVEMENT_UPDATE: + MovementUpdate = Packet.DecodeAsMovementUpdate(packet.Data); + + if(packet.TargetID.equals(OwnedActorID)) { + Target.SetNewVelocity(MovementUpdate.LinearVelocity); + Target.SetNewAngularVelocity(MovementUpdate.AngularVelocity); + break; + } + + Target.SetNetworkTarget(MovementUpdate.Position, MovementUpdate.Rotation); + Target.SetNewVelocity(MovementUpdate.LinearVelocity); + Target.SetNewAngularVelocity(MovementUpdate.AngularVelocity); + break; + case Packet.PACKET_POSSESS_ACTOR: + TryPossessActor(packet.TargetID, gameCore, scene); + break; + case Packet.PACKET_UPDATE_PLAYER_DISPLAY_NAME: + GameChat Name = Packet.decodeNameUpdate(packet.Data); + Server.ClientNames.put(Name.clientFrom(), Name.message()); + break; + case Packet.GAME_CHAT_DATA_PACKET: + GameChat chat = Packet.decodeGameChat(packet.Data); + boolean PlayerNameCached = Server.ClientNames.containsKey(chat.clientFrom()); + String PlayerName = chat.clientFrom().toString(); + if(PlayerNameCached) PlayerName = Server.ClientNames.get(chat.clientFrom()); + GameChats.put(chat,PlayerName); + break; + case Packet.PACKET_DESTROY_ACTOR: + GameChats.put(new GameChat(true, UUID.randomUUID(),"Destroying Actor " + packet.TargetID, Date.from(Instant.now())),"Server"); + Logger.debug("Destroying Actor [{}]", packet.TargetID); + Actor actorToDestroy = Actor.Actors.get(packet.TargetID); + if(actorToDestroy != null) { + scene.RemoveActor(actorToDestroy); + } else { + Logger.error("Actor [{}] not found", packet.TargetID); + } + break; + case Packet.PACKET_UPDATE_MODEL_ID: + Logger.debug("Rebound packet received for actor [{}]", packet.TargetID); + stringdata = Packet.DecodeAsString(packet.Data); + Actor actorToChangeModelID = Actor.Actors.get(packet.TargetID); + if(actorToChangeModelID != null) { + actorToChangeModelID.SetModelID(stringdata); + } + break; + case Packet.PACKET_SEND_PLAYER_COUNT: + Logger.debug("decoding player count packet"); + stringdata = Packet.DecodeAsString(packet.Data); + PlayersOnline = Integer.parseInt(stringdata); + break; + case Packet.PACKET_ASSIGN_UUID: + Logger.debug("decoding UUID packet"); + clientUUID = Packet.DecodeAsString(packet.Data); + break; + case Packet.PACKET_FIRE_RESULT: + //Logger.debug("Fire Packet Recieved" );// + Packet.DecodedFireResult fireResult = Packet.DecodeAsFireResult(packet.Data); + AudioInstance FireInstance = new AudioInstance("resources/EngineResources/audio/sounds/MusketFire.ogg","GunFireInstance" + packet.TargetID, engineInstance.audioManager(),fireResult.Origin.x, fireResult.Origin.y, fireResult.Origin.z, false); + FireInstance.SetAudioType(AudioInstance.AudioType.WEAPONS); + FireInstance.SetVolume(EngineConfig.getInstance().WeaponVolume); + FireInstance.Play(); + double Rnd = Math.random(); + AudioInstance HitInstance = new AudioInstance(Rnd < 0.5 ? "resources/EngineResources/audio/sounds/BulletHit1.ogg" : "resources/EngineResources/audio/sounds/BulletHit2.ogg","GunHitInstance" + packet.TargetID, engineInstance.audioManager(),fireResult.HitPoint.x, fireResult.HitPoint.y, fireResult.HitPoint.z, false); + HitInstance.SetAudioType(AudioInstance.AudioType.WEAPONS); + HitInstance.SetVolume(EngineConfig.getInstance().WeaponVolume * 10f); + HitInstance.Play(); + break; + } + } + } + } + + public static int ServerPort = 25565; + + @Deprecated + public static void LegacySetServerIP(String ServerIP, Thread serverThread){ + if(Connected){ + Connected = false; + serverThread.interrupt(); + ClientSideNetworkUtils.ServerIP = ServerIP; + PrimaryRuntime.ServerCon = new ClientConnectionThread(); + serverThread = new Thread(PrimaryRuntime.ServerCon); + serverThread.start(); + } + } + + public static void RequestPlayerCount(){ + Packet packet = new Packet(Packet.PACKET_SEND_PLAYER_COUNT); + packet.SetTargetType((byte) 0); + packet.SetData(new byte[]{0}); + packet.SetID("NULL"); + OutGoingPacketQueue.add(packet); + } + + public static void CreateGameChatPacket(String chatMessage){ + Packet packet = new Packet(Packet.GAME_CHAT_DATA_PACKET); + packet.SetTargetType((byte) 0); + packet.SetData(Packet.EncodeGameChat(UUID.randomUUID(), chatMessage, false)); + packet.SetID("NULL"); + OutGoingPacketQueue.add(packet); + } + + public static void UpdateEntityModelID(String ActorID, String ModelID){ + Packet packet = new Packet(Packet.PACKET_UPDATE_MODEL_ID); + packet.SetTargetType((byte) 0); + packet.SetData(ModelID.getBytes(StandardCharsets.UTF_8)); + packet.SetID(ActorID); + OutGoingPacketQueue.add(packet); + Logger.debug("Sent model ID update packet for actor [{}]", ActorID); + } + + public static void SendNamePacket(){ + Packet namePacket = new Packet(Packet.PACKET_UPDATE_PLAYER_DISPLAY_NAME); + namePacket.SetTargetType((byte) 0); + namePacket.SetData(Packet.EncodeNameUpdate(UUID.fromString(clientUUID), EngineConfig.getInstance().GetUserDisplayName())); + namePacket.SetID("NULL"); + OutGoingPacketQueue.add(namePacket); + } + + public static void SendEntityUpdatePacket(Actor actor){ + Packet newOutgoingPacket = new Packet((byte)6); + newOutgoingPacket.SetTargetType((byte) 0); + RigidPhysicsController physicsController = (RigidPhysicsController) actor.GetPhysicsController(); + if(physicsController == null) return; + RigidBody rigidBody = RigidBody.RigidBodyRegister.get(physicsController.RigidBodyID); + if(rigidBody == null) return; + newOutgoingPacket.SetData(Packet.EncodeMovementData(rigidBody.Position,rigidBody.Rotation,rigidBody.LinearVelocity,rigidBody.AngularVelocity)); + newOutgoingPacket.SetID(actor.GetID()); + OutGoingPacketQueue.add(newOutgoingPacket); + } + + public static int readPacket(DataInputStream in) throws IOException { + if(in == null) return 0; + + Packet newIncomingPacket = new Packet(in.readByte()); + + newIncomingPacket.SetTargetType(in.readByte()); + + int DataLength = in.readInt(); + byte[] IncomingData = new byte[DataLength]; + in.readFully(IncomingData); + newIncomingPacket.Data = IncomingData; + + int IDLength = in.readInt(); + byte[] IDData = new byte[IDLength]; + in.readFully(IDData); + + String ID = new String(IDData, StandardCharsets.UTF_8); + newIncomingPacket.SetID(ID); + IncomingPacketQueue.add(newIncomingPacket); + return newIncomingPacket.PacketTypeByte; + } + + public static void WritePacket(Packet outPacket, DataOutputStream Outgoing) throws IOException { + if(Outgoing == null ) return; + if(outPacket.PacketTypeByte == Packet.PACKET_UPDATE_MODEL_ID){ + Logger.debug("Sending model ID update packet for actor [{}]", outPacket.TargetID); + } + byte[] DataToSend = Packet.GetOutgoingData(outPacket); + Outgoing.write(DataToSend); + Outgoing.flush(); + + } + + public static void FireWeapon(Vector3f barrelLocalOffset, float damage, float maxRange, Camera camera, String ShooterID){ + Vector3f camRotation = camera.GetRotation(); + Quaternionf aimRotation = new Quaternionf().rotateYXZ(-camRotation.y, -camRotation.x, camRotation.z); + + Vector3f direction = aimRotation.transform(new Vector3f(0, 0, -1)); + Vector3f origin = new Vector3f(camera.GetPosition()); + /// .add(aimRotation.transform(new Vector3f(barrelLocalOffset), new Vector3f())); + Logger.debug("Fire Packet being sent" ); + Packet packet = new Packet(Packet.PACKET_FIRE_WEAPON); + packet.SetID(ShooterID); + packet.SetData(Packet.EncodeFireRequest(origin, direction, damage, maxRange)); + OutGoingPacketQueue.add(packet); + } + + private static final boolean UseLegacyConnection = false; + + public static synchronized void Reconnect() { + Logger.debug("Reconnecting"); + Reconnect = true; + if(UseLegacyConnection) { + if (ClientConnectionThread.SocketToServer != null) { + try { + ClientConnectionThread.SocketToServer.close(); + } catch (IOException ignored) { + Logger.error("Failed to close socket: [{}]", ignored.getMessage()); + } + } + ClientConnectionThread.SocketToServer = null; + } + Connected = false; + PrimaryRuntime.RejoinMultiplayer(); + PrimaryRuntime.GetEngineInstance().scene().Reset(); + } + + private static boolean Reconnect = false; +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/GameChat.java b/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/GameChat.java new file mode 100644 index 0000000..9d23414 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/GameChat.java @@ -0,0 +1,7 @@ +package net.halbear.Terrain4J.EngineCore.ServerNetworking; + +import java.util.Date; +import java.util.UUID; + +public record GameChat(boolean FromServer, UUID clientFrom, String message, Date timestamp) { +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/IP_MODIFIER.java b/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/IP_MODIFIER.java new file mode 100644 index 0000000..4fc8327 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/IP_MODIFIER.java @@ -0,0 +1,11 @@ +package net.halbear.Terrain4J.EngineCore.ServerNetworking; + +public enum IP_MODIFIER { + Administrator, + User, + Banned, + RestrictedPermissions, + DontRead, + Throttled, + Unreadable +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/NetworkingUtil.java b/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/NetworkingUtil.java new file mode 100644 index 0000000..886d456 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/NetworkingUtil.java @@ -0,0 +1,20 @@ +package net.halbear.Terrain4J.EngineCore.ServerNetworking; + +import java.io.IOException; +import java.net.Inet6Address; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.nio.channels.SocketChannel; + +public class NetworkingUtil { + + public static String GetIPAddress(SocketChannel socketChannel) throws IOException { + InetSocketAddress remoteAddress = (InetSocketAddress) socketChannel.getRemoteAddress(); + String IPAddress = "INVALID"; + if (remoteAddress != null) { + InetAddress remoteIp = remoteAddress.getAddress(); + IPAddress = remoteIp.getHostAddress(); + } + return IPAddress; + } +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/Packet.java b/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/Packet.java index bea50ee..2d72efa 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/Packet.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/Packet.java @@ -1,12 +1,14 @@ package net.halbear.Terrain4J.EngineCore.ServerNetworking; -import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; +import net.halbear.Executable.Server; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Util.VulkanUtils; import org.joml.Quaternionf; import org.joml.Vector3f; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; -import java.util.UUID; +import java.time.Instant; +import java.util.*; public class Packet { @@ -26,12 +28,19 @@ public class Packet { public static final byte PACKET_SEND_PLAYER_COUNT = 13; public static final byte PACKET_UPDATE_PLAYER_DISPLAY_NAME = 14; public static final byte PACKET_FIRE_RESULT = 15; + public static final byte GAME_DATA_PACKET = 16; + public static final byte GAME_CHAT_DATA_PACKET = 17; + public static final byte QUERY_CLIENT_UUID = 18; + public static final byte QUERY_MAC_ADDRESS = 19; public byte PacketTypeByte; - public byte TargetType; //0 Actor + public byte TargetType; //0 Actor //1 Other Client public byte[] Data; public String TargetID; - public UUID ClientID; + public UUID SessionUUID; + + public boolean Validated = true; + public UUID ClientUUID; public Packet(byte Type){ PacketTypeByte = Type; @@ -147,6 +156,86 @@ public class Packet { public boolean Hit; } + public static String[] DecodeNameUpdate(byte[] Data){ + String[] decoded = DecodeStrings(Data); + if(decoded.length != 2) + return null; + return new String[]{decoded[0], decoded[1]}; + } + + public static byte[] EncodeNameUpdate(UUID playerUUID, String Name){ + return EncodeStrings(new String[]{playerUUID.toString(), Server.ProcessStringFiltering(Name)}); + } + + public static GameChat decodeNameUpdate(byte[] data){ + String[] decoded = DecodeStrings(data); + if(decoded.length != 2) + return null; + return new GameChat(false,UUID.fromString(decoded[0]), Server.ProcessStringFiltering(decoded[1]), Date.from(Instant.now())); + } + + + public static byte[] EncodeGameChat(UUID playerUUID, String Message, boolean IsServer){ + return EncodeStrings(new String[]{playerUUID.toString(), Message, Date.from(Instant.now()).toString(), IsServer ? "s" : "c"}); + } + + public static GameChat decodeGameChat(byte[] data){ + String[] decoded = DecodeStrings(data); + if(decoded.length != 4) + return null; + return new GameChat((Objects.equals(decoded[3], "s")),UUID.fromString(decoded[0]), Server.ProcessStringFiltering(decoded[1]), Date.from(Instant.now())); + } + + private static String[] DecodeStrings(byte[] DataIn){ + List Strings = new ArrayList<>(); + int Offset = 0; + int bytesLeftInString = 0; + byte[] bytes = new byte[0]; + while(Offset < DataIn.length){ + bytesLeftInString = ByteBuffer.wrap(DataIn).getInt(Offset); + Offset += 4; + bytes = new byte[bytesLeftInString]; + for(int j = 0; j < bytesLeftInString; j++){ + bytes[j] = DataIn[Offset]; + Offset++; + } + if(bytes.length > 0){ + Strings.add(DecodeAsString(bytes)); + } + } + return Strings.toArray(new String[0]); + } + + private static byte[] EncodeStrings(String[] string){ + List Strings = new ArrayList<>(); + int TotalLength = 0; + int LengthPadding = 0; + for(int i = 0; i < string.length; i++){ + byte[] bytes = string[i].getBytes(StandardCharsets.UTF_8); + TotalLength += bytes.length; + LengthPadding += 4; + Strings.add(bytes); + } + TotalLength += LengthPadding; + byte[] Data = new byte[TotalLength]; + int Offset = 0; + for(int i = 0; i < Strings.size(); i++){ + byte[] bytes = ByteBuffer.allocate(4).putInt(Strings.get(i).length).array(); + for(int j = 0; j < bytes.length; j++) { + Data[Offset] = bytes[j]; + Offset++; + } + for(int j = 0; j < Strings.get(i).length; j++) { + Data[Offset] = Strings.get(i)[j]; + Offset++; + } + } + return Data; + } + public static byte[] EncodeString(String string){ + return string.getBytes(StandardCharsets.UTF_8); + } + private static byte[] EncodeFloats(float[] floats){ byte[] Data = new byte[floats.length * VulkanUtils.FLOAT_SIZE]; int Offset = 0; @@ -184,7 +273,9 @@ public class Packet { public static Vector3f DecodeAsVector3f(byte[] DataIn){ Vector3f newVector = new Vector3f(); ByteBuffer buffer = ByteBuffer.wrap(DataIn); - newVector.set(buffer.getFloat(),buffer.getFloat(),buffer.getFloat()); + if(buffer.remaining() >= 12) { + newVector.set(buffer.getFloat(), buffer.getFloat(), buffer.getFloat()); + } return newVector; } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/ServerConnection.java b/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/ServerConnection.java new file mode 100644 index 0000000..c124368 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/ServerConnection.java @@ -0,0 +1,18 @@ +package net.halbear.Terrain4J.EngineCore.ServerNetworking; + +import java.util.Queue; +import java.util.UUID; + +public interface ServerConnection { + + public boolean OwnsActor(String ActorID); + public void CollectIncomingPackets(Queue ReferenceList); + public UUID GetInstanceUUID(); + public UUID GetClientUUID(); + public void SendPossessActorPacket(String actorID) ; + public void AddOutgoingPacket(Packet outgoingPacket); + public void SetOwnedActorID(String ownedActorID); + public void Clear(); + public void CleanUp(); + public void ProcessIncomingPacket() ; +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/ServerSideNetworkUtils.java b/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/ServerSideNetworkUtils.java new file mode 100644 index 0000000..e3360d8 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/ServerNetworking/ServerSideNetworkUtils.java @@ -0,0 +1,371 @@ +package net.halbear.Terrain4J.EngineCore.ServerNetworking; + +import net.halbear.Executable.Server; +import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidBody; +import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidPhysicsController; +import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; +import net.halbear.Terrain4J.EngineCore.Main.Scene.Actor; +import net.halbear.Terrain4J.EngineCore.Main.Scene.PlayerActor; +import net.halbear.Terrain4J.EngineCore.Main.Util.Maths.T4Raycast; +import net.halbear.Terrain4J.EngineCore.Threads.ServerConnectionThread; +import org.joml.Quaternionf; +import org.joml.Vector3f; +import org.tinylog.Logger; + +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import static net.halbear.Executable.Server.ConnectedClients; +import static net.halbear.Terrain4J.EngineCore.Logic.Physics.WorldPhysicsManager.GetActorForRigidBody; + +public class ServerSideNetworkUtils { + public static final Map BypassNullTargets = new HashMap<>(); + + static{ + BypassNullTargets.put(Packet.PACKET_CREATE_ACTOR, true); + BypassNullTargets.put(Packet.PACKET_PING, true); + BypassNullTargets.put(Packet.GAME_CHAT_DATA_PACKET, true); + BypassNullTargets.put(Packet.GAME_DATA_PACKET, true ); + BypassNullTargets.put(Packet.PACKET_UPDATE_PLAYER_DISPLAY_NAME, true ); + BypassNullTargets.put(Packet.QUERY_CLIENT_UUID, true ); + BypassNullTargets.put(Packet.QUERY_MAC_ADDRESS, true ); + BypassNullTargets.put(Packet.PACKET_ASSIGN_UUID, true ); + } + + public static void ProcessClientPacket(Packet packet){ + // Logger.debug("Processing packet of type [{}] from client with UUID {}",packet.PacketTypeByte,packet.SessionUUID); + ClientSession sender = ClientSession.GetClientSessionInstances().get(packet.SessionUUID); + if(sender == null) return; + //Logger.debug("Packet: " + packet.PacketTypeByte); + + Actor Target = Actor.Actors.get(packet.TargetID); + + if(Target == null && + (!BypassNullTargets.containsKey(packet.PacketTypeByte) || !BypassNullTargets.get(packet.PacketTypeByte))) { + return; + } + switch (packet.PacketTypeByte){ + case Packet.PACKET_UPDATE_LOCATION: + if(!sender.OwnsActor(packet.TargetID)) return; + Target.SetNewPosition(Packet.DecodeAsVector3f(packet.Data)); + break; + + case Packet.PACKET_UPDATE_ROTATION: + if(!sender.OwnsActor(packet.TargetID)) return; + Target.SetNewRotation(Packet.DecodeAsQuaternation(packet.Data)); + break; + + case Packet.PACKET_UPDATE_LINEAR_VELOCITY: + if(!sender.OwnsActor(packet.TargetID)) return; + Target.SetNewVelocity(Packet.DecodeAsVector3f(packet.Data)); + break; + + case Packet.PACKET_UPDATE_ANGULAR_VELOCITY: + if(!sender.OwnsActor(packet.TargetID)) return; + Target.SetNewAngularVelocity(Packet.DecodeAsVector3f(packet.Data)); + break; + + case Packet.PACKET_MOVEMENT_UPDATE: + if(!sender.OwnsActor(packet.TargetID)) return; + + Packet.DecodedMovementPacket movementUpdate = Packet.DecodeAsMovementUpdate(packet.Data); + Target.SetNewRotation(movementUpdate.Rotation); + Target.SetNewPosition(movementUpdate.Position); + Target.SetNewVelocity(movementUpdate.LinearVelocity); + Target.SetNewAngularVelocity(movementUpdate.AngularVelocity); + break; + + case Packet.PACKET_CLIENT_INPUT: + if(!sender.OwnsActor(packet.TargetID)) return; + //to be implemented later + break; + case Packet.PACKET_UPDATE_MODEL_ID: + if(!packet.TargetID.equals(ConnectedClients.get(packet.SessionUUID).OwnedActorID)) { + return; + } + Packet ReboundPacket = CreateUpdateModelIDPacket(packet.TargetID, Packet.DecodeAsString(packet.Data)); + Server.OutGoingPacketQueue.add(ReboundPacket); + break; + case Packet.GAME_CHAT_DATA_PACKET: + GameChat chat = Packet.decodeGameChat(packet.Data); + Packet GameChatPacket = CreateGameChatPacket(sender.GetClientUUID(), chat.message(), false); + String Un = sender.GetClientUUID().toString(); + if(Server.ClientNames.containsKey(sender.GetClientUUID())) Un = Server.ClientNames.get(sender.GetClientUUID()); + PrimaryRuntime.printLog(String.format("[Game Chat] %s : %s", Un, chat.message())); + Server.OutGoingPacketQueue.add(GameChatPacket); + break; + case Packet.PACKET_UPDATE_PLAYER_DISPLAY_NAME: + GameChat nameUpd = Packet.decodeNameUpdate(packet.Data); + Packet DisplayNamePacket = CreateUsernameUpdatePacket(sender.GetClientUUID(), nameUpd.message()); + if(!Server.ClientNames.containsKey(sender.GetClientUUID())){ + PrimaryRuntime.printLog(String.format("Assigning Client [%s] a Username of: [%s]", sender.GetClientUUID().toString(), nameUpd.message())); + Server.OutGoingPacketQueue.add(CreateGameChatPacket(sender.GetClientUUID(), nameUpd.message() + " Joined", true)); + } + Server.ClientNames.put(sender.GetClientUUID(), nameUpd.message()); + Server.OutGoingPacketQueue.add(DisplayNamePacket); + break; + case Packet.PACKET_SEND_PLAYER_COUNT: + if(!packet.TargetID.equals("NULL")) { + return; + } + break; + case Packet.PACKET_FIRE_WEAPON: + Logger.debug("Fire Weapon Packet Recieved"); + HandleFireWeapon(packet); + break; + } + } + + @Deprecated + public static void LegacyProcessClientPacket(Packet packet){ + // Logger.debug("Processing packet of type [{}] from client with UUID {}",packet.PacketTypeByte,packet.SessionUUID); + ServerConnectionThread sender = ConnectedClients.get(packet.SessionUUID); + if(sender == null) return; + //Logger.debug("Packet: " + packet.PacketTypeByte); + + Actor Target = Actor.Actors.get(packet.TargetID); + + if(Target == null && + (!BypassNullTargets.containsKey(packet.PacketTypeByte) || !BypassNullTargets.get(packet.PacketTypeByte))) { + return; + } + switch (packet.PacketTypeByte){ + case Packet.PACKET_UPDATE_LOCATION: + if(!sender.OwnsActor(packet.TargetID)) return; + Target.SetNewPosition(Packet.DecodeAsVector3f(packet.Data)); + break; + + case Packet.PACKET_UPDATE_ROTATION: + if(!sender.OwnsActor(packet.TargetID)) return; + Target.SetNewRotation(Packet.DecodeAsQuaternation(packet.Data)); + break; + + case Packet.PACKET_UPDATE_LINEAR_VELOCITY: + if(!sender.OwnsActor(packet.TargetID)) return; + Target.SetNewVelocity(Packet.DecodeAsVector3f(packet.Data)); + break; + + case Packet.PACKET_UPDATE_ANGULAR_VELOCITY: + if(!sender.OwnsActor(packet.TargetID)) return; + Target.SetNewAngularVelocity(Packet.DecodeAsVector3f(packet.Data)); + break; + + case Packet.PACKET_MOVEMENT_UPDATE: + if(!sender.OwnsActor(packet.TargetID)) return; + + Packet.DecodedMovementPacket movementUpdate = Packet.DecodeAsMovementUpdate(packet.Data); + Target.SetNewRotation(movementUpdate.Rotation); + Target.SetNewPosition(movementUpdate.Position); + Target.SetNewVelocity(movementUpdate.LinearVelocity); + Target.SetNewAngularVelocity(movementUpdate.AngularVelocity); + break; + + case Packet.PACKET_CLIENT_INPUT: + if(!sender.OwnsActor(packet.TargetID)) return; + //to be implemented later + break; + case Packet.PACKET_UPDATE_MODEL_ID: + if(!packet.TargetID.equals(ConnectedClients.get(packet.SessionUUID).OwnedActorID)) { + return; + } + Packet ReboundPacket = CreateUpdateModelIDPacket(packet.TargetID, Packet.DecodeAsString(packet.Data)); + Server.OutGoingPacketQueue.add(ReboundPacket); + break; + case Packet.GAME_CHAT_DATA_PACKET: + GameChat chat = Packet.decodeGameChat(packet.Data); + Packet GameChatPacket = CreateGameChatPacket(sender.ClientID, chat.message(), false); + String Un = sender.ClientID.toString(); + if(Server.ClientNames.containsKey(sender.ClientID)) Un = Server.ClientNames.get(sender.ClientID); + PrimaryRuntime.printLog(String.format("[Game Chat] %s : %s", Un, chat.message())); + Server.OutGoingPacketQueue.add(GameChatPacket); + break; + case Packet.PACKET_UPDATE_PLAYER_DISPLAY_NAME: + GameChat nameUpd = Packet.decodeNameUpdate(packet.Data); + Packet DisplayNamePacket = CreateUsernameUpdatePacket(sender.ClientID, nameUpd.message()); + if(!Server.ClientNames.containsKey(sender.ClientID)){ + PrimaryRuntime.printLog(String.format("Assigning Client [%s] a Username of: [%s]", sender.ClientID.toString(), nameUpd.message())); + Server.OutGoingPacketQueue.add(CreateGameChatPacket(sender.ClientID, nameUpd.message() + " Joined", true)); + } + Server.ClientNames.put(sender.ClientID, nameUpd.message()); + Server.OutGoingPacketQueue.add(DisplayNamePacket); + break; + case Packet.PACKET_SEND_PLAYER_COUNT: + if(!packet.TargetID.equals("NULL")) { + return; + } + break; + case Packet.PACKET_FIRE_WEAPON: + Logger.debug("Fire Weapon Packet Recieved"); + HandleFireWeapon(packet); + break; + } + } + + public static Packet CreatePlayerUUIDPacket(UUID clientID, ClientSession sender){ + Logger.debug("Creating UUID packet for client: " + clientID); + Packet packet = new Packet(Packet.PACKET_ASSIGN_UUID); + packet.SetTargetType((byte) 0); + packet.SetData(clientID.toString().getBytes(StandardCharsets.UTF_8)); + packet.SetID("New Client"); + packet.SessionUUID = sender.GetInstanceUUID(); + return packet; + } + + @Deprecated + public static Packet LegacyCreatePlayerUUIDPacket(UUID clientID, ServerConnectionThread sender){ + Logger.debug("Creating UUID packet for client: " + clientID); + Packet packet = new Packet(Packet.PACKET_ASSIGN_UUID); + packet.SetTargetType((byte) 0); + packet.SetData(clientID.toString().getBytes(StandardCharsets.UTF_8)); + packet.SetID("New Client"); + packet.SessionUUID = sender.ClientID; + return packet; + } + + private static void HandleFireWeapon(Packet packet){ + Packet.DecodedFireRequest request = Packet.DecodeAsFireRequest(packet.Data); + + Actor shooter = Actor.Actors.get(packet.TargetID); + String excludeBodyID = null; + if (shooter != null && shooter.GetPhysicsController() instanceof RigidPhysicsController rpc) { + excludeBodyID = rpc.RigidBodyID; + } + + T4Raycast.Hit hit = T4Raycast.Nearest(request.Origin, request.Direction, request.MaxRange, excludeBodyID); + boolean didHit = hit != null; + String hitActorID = ""; + Vector3f resultPoint; + + if (didHit) { + resultPoint = hit.Point; + Vector3f impulse = new Vector3f(request.Direction).normalize().mul(request.Damage); + hit.Body.ApplyImpulse(impulse, hit.Point); + Actor hitActor = GetActorForRigidBody(hit.Body); + if (hitActor != null) hitActorID = hitActor.GetID(); + } else { + resultPoint = new Vector3f(request.Direction).normalize().mul(request.MaxRange).add(request.Origin); + } + // Logger.debug("\n Raycast Result: " + hit + "\n Raycast Request: Origin->" + request.Origin + " | Direction->" + request.Direction + " | MaxRange->" + request.MaxRange + "\n Result point: " + resultPoint + "\n Hit Actor: " + hitActorID); + + Packet result = new Packet(Packet.PACKET_FIRE_RESULT); + result.SetID(hitActorID); + result.SetData(Packet.EncodeFireResult(request.Origin, resultPoint, didHit)); + Server.OutGoingPacketQueue.add(result); + } + + public static Packet CreatePlayerCountPacket(int PlayerCount){ + Packet packet = new Packet(Packet.PACKET_SEND_PLAYER_COUNT); + packet.SetTargetType((byte) 0); + packet.SetData(Integer.toString(PlayerCount).getBytes(StandardCharsets.UTF_8)); + packet.SetID("New Client"); + return packet; + } + + public static Packet CreateActorPacket(Actor actor){ + Packet newOutgoingPacket = new Packet(Packet.PACKET_CREATE_ACTOR); + newOutgoingPacket.SetTargetType((byte) 0); + + RigidPhysicsController physicsController = (RigidPhysicsController) actor.GetPhysicsController(); + if(physicsController == null) return null; + + RigidBody rigidBody = RigidBody.RigidBodyRegister.get(physicsController.RigidBodyID); + if(rigidBody == null) return null; + + String actorType = actor instanceof PlayerActor ? "PlayerActor" : "Actor"; + StringBuilder OutgoingData = new StringBuilder(actorType) + .append(":") + .append(actor.GetModelID()); + + // Logger.debug("Creating actor packet: actorID=" + actor.GetID() + " modelID=" + actor.GetModelID() + " type=" + actorType); + + Vector3f Position = rigidBody.Position; + Quaternionf Rotation = rigidBody.Rotation; + Vector3f Scale = actor.GetScale(); + Vector3f ColliderBox = rigidBody.shape.hxhyhz; + float MassKG = rigidBody.MassKG; + Vector3f LinearVelocity = rigidBody.LinearVelocity; + Vector3f AngularVelocity = rigidBody.AngularVelocity; + Vector3f PositionOffset = actor.GetPositionOffset(); + + Vector3f CameraOffset = new Vector3f(); + if(actor instanceof PlayerActor playerActor) { + CameraOffset.set(playerActor.CameraOffset); + } + + float[] floats = new float[]{ + Position.x, Position.y, Position.z, + Rotation.x, Rotation.y, Rotation.z, Rotation.w, + Scale.x, Scale.y, Scale.z, + ColliderBox.x, ColliderBox.y, ColliderBox.z, + MassKG, + LinearVelocity.x, LinearVelocity.y, LinearVelocity.z, + AngularVelocity.x, AngularVelocity.y, AngularVelocity.z, + PositionOffset.x, PositionOffset.y, PositionOffset.z, + CameraOffset.x, CameraOffset.y, CameraOffset.z + }; + + for(int i = 0; i < floats.length; i++){ + OutgoingData.append(":").append(floats[i]); + } + + newOutgoingPacket.SetData(OutgoingData.toString().getBytes(StandardCharsets.UTF_8)); + newOutgoingPacket.SetID(actor.GetID()); + return newOutgoingPacket; + } + + public static void BroadcastCreateActorPacket(Actor actor) { + Packet newOutgoingPacket = CreateActorPacket(actor); + if(newOutgoingPacket != null)Server.OutGoingPacketQueue.add(newOutgoingPacket); + } + + public static Packet CreateGameChatPacket(UUID Client, String chatMessage, boolean server){ + Packet packet = new Packet(Packet.GAME_CHAT_DATA_PACKET); + packet.SetTargetType((byte) 0); + packet.SetData(Packet.EncodeGameChat(Client, chatMessage, server)); + packet.SetID("NULL"); + return packet; + } + + public static Packet CreateUsernameUpdatePacket(UUID Client, String username){ + Packet packet = new Packet(Packet.PACKET_UPDATE_PLAYER_DISPLAY_NAME); + packet.SetTargetType((byte) 0); + packet.SetData(Packet.EncodeNameUpdate(Client, username)); + packet.SetID("NULL"); + return packet; + } + + public static Packet CreateUpdateModelIDPacket(String actorID, String NewModelID){ + Packet packet = new Packet(Packet.PACKET_UPDATE_MODEL_ID); + packet.SetTargetType((byte) 0); + packet.SetData(NewModelID.getBytes(StandardCharsets.UTF_8)); + packet.SetID(actorID); + return packet; + } + + public static Packet CreateDestroyActorPacket(String actorID){ + Logger.debug("Creating Detsroy Actor Packet"); + Packet packet = new Packet(Packet.PACKET_DESTROY_ACTOR); + packet.SetTargetType((byte) 0); + packet.SetData(new byte[0]); + packet.SetID(actorID); + return packet; + } + + public static void BroadcastDestroyActorPacket(String actorID){ + Server.OutGoingPacketQueue.add(CreateDestroyActorPacket(actorID)); + } + + public static void SendEntityUpdatePacket(Actor actor){ + Packet newOutgoingPacket = new Packet((byte)6); + newOutgoingPacket.SetTargetType((byte) 0); + RigidPhysicsController physicsController = (RigidPhysicsController) actor.GetPhysicsController(); + if(physicsController == null) return; + RigidBody rigidBody = RigidBody.RigidBodyRegister.get(physicsController.RigidBodyID); + if(rigidBody == null) return; + newOutgoingPacket.SetData(Packet.EncodeMovementData(rigidBody.Position,rigidBody.Rotation,rigidBody.LinearVelocity,rigidBody.AngularVelocity)); + newOutgoingPacket.SetID(actor.GetID()); + Server.OutGoingPacketQueue.add(newOutgoingPacket); + } +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/ClientConnectionThread.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/ClientConnectionThread.java index 45ccfc0..9c770a2 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/ClientConnectionThread.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/ClientConnectionThread.java @@ -1,5 +1,6 @@ package net.halbear.Terrain4J.EngineCore.Threads; +import com.oracle.svm.core.annotate.Delete; import net.halbear.Executable.Server; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; @@ -10,6 +11,8 @@ import net.halbear.Terrain4J.EngineCore.Main.AudioInstance; import net.halbear.Terrain4J.EngineCore.Main.GameCore; import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; import net.halbear.Terrain4J.EngineCore.Main.Scene.*; +import net.halbear.Terrain4J.EngineCore.ServerNetworking.ClientSideNetworkUtils; +import net.halbear.Terrain4J.EngineCore.ServerNetworking.GameChat; import net.halbear.Terrain4J.EngineCore.ServerNetworking.Packet; import org.joml.Quaternionf; import org.joml.Vector3f; @@ -20,268 +23,17 @@ import java.net.Socket; import java.net.SocketTimeoutException; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; +import java.time.Instant; import java.util.*; import java.util.concurrent.ConcurrentLinkedQueue; +import static net.halbear.Terrain4J.EngineCore.ServerNetworking.ClientSideNetworkUtils.*; +@Deprecated public class ClientConnectionThread implements Runnable{ - public static boolean Connected = false; - public static boolean pinging = false; - public static String ServerIP = "localhost"; - public static String ServerMessage = "Offline"; + public static Socket SocketToServer; - public static final Queue OutGoingPacketQueue = new ConcurrentLinkedQueue<>(); - public static final Queue IncomingPacketQueue = new ConcurrentLinkedQueue<>(); public static DataOutputStream outToServer; public static DataInputStream in; - public static String clientUUID; - public static String OwnedActorID = "NULL"; - public static String PendingPossessActorID = "NULL"; - public static int PlayersOnline = 0; - - private static boolean TryPossessActor(String actorID, GameCore gameCore, IScene scene){ - Actor actor = Actor.Actors.get(actorID); - - if(!(actor instanceof PlayerActor playerActor)) { - PendingPossessActorID = actorID; - Logger.info("Possess actor [{}] is not created yet. Deferring possession.", actorID); - return false; - } - - if(!(scene instanceof Scene concreteScene)) { - PendingPossessActorID = actorID; - Logger.warn("Cannot possess actor [{}] because scene is not a Scene instance", actorID); - return false; - } - - Camera debugCamera = concreteScene.GetCamera(); - if(debugCamera == null) { - PendingPossessActorID = actorID; - Logger.warn("Cannot possess actor [{}] because DebugCamera is missing", actorID); - return false; - } - - OwnedActorID = actorID; - PendingPossessActorID = "NULL"; - - playerActor.AttachCamera(debugCamera.GetID()); - concreteScene.SetNetworkControlledPlayer(playerActor); - gameCore.SetPlayerActorID(actorID); - - Logger.info( - "Client now controls server actor [{}], attached camera [{}]", - actorID, - debugCamera.GetID() - ); - - return true; - } - - public static final Map BypassNullTargets = new HashMap<>(); - - static{ - BypassNullTargets.put(Packet.PACKET_CREATE_ACTOR, true); - BypassNullTargets.put(Packet.PACKET_PING, true); - BypassNullTargets.put(Packet.PACKET_POSSESS_ACTOR, true); - BypassNullTargets.put(Packet.PACKET_DESTROY_ACTOR, true ); - BypassNullTargets.put(Packet.PACKET_ASSIGN_UUID, true ); - BypassNullTargets.put(Packet.PACKET_SEND_PLAYER_COUNT, true ); - BypassNullTargets.put(Packet.PACKET_FIRE_RESULT, true); - } - - public static void DecodePackets(EngineInstance engineInstance, GameCore gameCore, IScene scene){ - if(!IncomingPacketQueue.isEmpty()){ - Packet packet; - while((packet = IncomingPacketQueue.poll()) != null){ - // System.out.println("Packet: " + packet.PacketTypeByte); - Actor Target = Actor.Actors.get(packet.TargetID); - Vector3f vector3f = new Vector3f(); - String stringdata = ""; - Quaternionf quaternionfdata = new Quaternionf(); - Packet.DecodedMovementPacket MovementUpdate; - if(packet.PacketTypeByte >= 0 && packet.PacketTypeByte < 4 && packet.PacketTypeByte != 1){ - vector3f = Packet.DecodeAsVector3f(packet.Data); - } - - if(Target == null && - (!BypassNullTargets.containsKey(packet.PacketTypeByte) || !BypassNullTargets.get(packet.PacketTypeByte))) { - continue; - } - - switch (packet.PacketTypeByte) { - case Packet.PACKET_UPDATE_LOCATION: - Target.SetNewPosition(vector3f); - break; - case Packet.PACKET_UPDATE_ROTATION: - quaternionfdata = Packet.DecodeAsQuaternation(packet.Data); - Target.SetNewRotation(quaternionfdata); - break; - case Packet.PACKET_UPDATE_LINEAR_VELOCITY: - Target.SetNewVelocity(vector3f); - break; - case Packet.PACKET_UPDATE_ANGULAR_VELOCITY: - Target.SetNewAngularVelocity(vector3f); - break; - case Packet.PACKET_CREATE_ACTOR: //"ACtorType:ModelID:x:y:z:rx:ry:rz:sx:sy:sz:hx:hy:hz:MassKG:vx:vy:vz:avx:avy:avz:posOffx:posOffy:posOffz:camOffx:camOffy:camOffz" - try { - stringdata = Packet.DecodeAsString(packet.Data); - String[] Split = stringdata.split(":"); - - if(Split.length < 22) { - Logger.error("Create actor packet [{}] has too few fields: [{}] data=[{}]", packet.TargetID, Split.length, stringdata); - break; - } - Vector3f Position = new Vector3f( - Float.parseFloat(Split[2]), - Float.parseFloat(Split[3]), - Float.parseFloat(Split[4]) - ); - - Quaternionf Rotation = new Quaternionf( - Float.parseFloat(Split[5]), - Float.parseFloat(Split[6]), - Float.parseFloat(Split[7]), - Float.parseFloat(Split[8]) - ); - - Vector3f Scale = new Vector3f( - Float.parseFloat(Split[9]), - Float.parseFloat(Split[10]), - Float.parseFloat(Split[11]) - ); - - Vector3f CollisionBox = new Vector3f( - Float.parseFloat(Split[12]), - Float.parseFloat(Split[13]), - Float.parseFloat(Split[14]) - ); - - float MassKG = Float.parseFloat(Split[15]); - - Vector3f Velocity = new Vector3f( - Float.parseFloat(Split[16]), - Float.parseFloat(Split[17]), - Float.parseFloat(Split[18]) - ); - - Vector3f AngularVelocity = new Vector3f( - Float.parseFloat(Split[19]), - Float.parseFloat(Split[20]), - Float.parseFloat(Split[21]) - ); - - Vector3f PositionOffset = new Vector3f(); - if(Split.length >= 25) { - PositionOffset.set( - Float.parseFloat(Split[22]), - Float.parseFloat(Split[23]), - Float.parseFloat(Split[24]) - ); - } - - Vector3f CameraOffset = new Vector3f(0, 1.0f, 0); - if(Split.length >= 28) { - CameraOffset.set( - Float.parseFloat(Split[25]), - Float.parseFloat(Split[26]), - Float.parseFloat(Split[27]) - ); - } - - String actorType = Split[0]; - String modelID = Split[1]; - if (actorType.equals("PlayerActor")) { - Target = new PlayerActor("NULL", packet.TargetID, modelID, Position).SetCameraOffset(CameraOffset); - Target.SetPositionOffset(PositionOffset); - } else { - Target = new Actor(packet.TargetID, modelID, Position); - } - - Target.SetScale(Scale); - Target.CreatePhysicsController(ConvexMesh.Box(CollisionBox.x, CollisionBox.y, CollisionBox.z), MassKG); - Target.SetServerSynced(MassKG > 0.0f || actorType.equals("PlayerActor")); - - Target.SetNewRotation(Rotation); - - RigidPhysicsController physicsController = (RigidPhysicsController) Target.GetPhysicsController(); - - - RigidBody rigidBody = RigidBody.RigidBodyRegister.get(physicsController.RigidBodyID); - if (rigidBody != null) { - rigidBody.LinearVelocity.set(Velocity); - rigidBody.AngularVelocity.set(AngularVelocity); - if(actorType.equals("PlayerActor")){ - rigidBody.LockRotation(); - } - } - - scene.AddActor(Target); - - if(packet.TargetID.equals(PendingPossessActorID)) { - TryPossessActor(packet.TargetID, gameCore, scene); - } - - } catch (Exception e) { - Logger.error(e, "Failed to decode create actor packet for actor [{}]", packet.TargetID); - } - break; - case Packet.PACKET_MOVEMENT_UPDATE: - MovementUpdate = Packet.DecodeAsMovementUpdate(packet.Data); - - if(packet.TargetID.equals(OwnedActorID)) { - Target.SetNewVelocity(MovementUpdate.LinearVelocity); - Target.SetNewAngularVelocity(MovementUpdate.AngularVelocity); - break; - } - - Target.SetNetworkTarget(MovementUpdate.Position, MovementUpdate.Rotation); - Target.SetNewVelocity(MovementUpdate.LinearVelocity); - Target.SetNewAngularVelocity(MovementUpdate.AngularVelocity); - break; - case Packet.PACKET_POSSESS_ACTOR: - TryPossessActor(packet.TargetID, gameCore, scene); - break; - case Packet.PACKET_DESTROY_ACTOR: - Actor actorToDestroy = Actor.Actors.get(packet.TargetID); - if(actorToDestroy != null) { - scene.RemoveActor(actorToDestroy); - } - break; - case Packet.PACKET_UPDATE_MODEL_ID: - Logger.debug("Rebound packet received for actor [{}]", packet.TargetID); - stringdata = Packet.DecodeAsString(packet.Data); - Actor actorToChangeModelID = Actor.Actors.get(packet.TargetID); - if(actorToChangeModelID != null) { - actorToChangeModelID.SetModelID(stringdata); - } - break; - case Packet.PACKET_SEND_PLAYER_COUNT: - System.out.println("decoding player count packet"); - stringdata = Packet.DecodeAsString(packet.Data); - PlayersOnline = Integer.parseInt(stringdata); - break; - case Packet.PACKET_ASSIGN_UUID: - System.out.println("decoding UUID packet"); - clientUUID = Packet.DecodeAsString(packet.Data); - break; - case Packet.PACKET_FIRE_RESULT: - System.out.println("Fire Packet Recieved" ); - Packet.DecodedFireResult fireResult = Packet.DecodeAsFireResult(packet.Data); - AudioInstance FireInstance = new AudioInstance("resources/EngineResources/audio/sounds/MusketFire.ogg","GunFireInstance" + packet.TargetID, engineInstance.audioManager(),fireResult.Origin.x, fireResult.Origin.y, fireResult.Origin.z, false); - FireInstance.SetAudioType(AudioInstance.AudioType.WEAPONS); - FireInstance.SetVolume(EngineConfig.getInstance().WeaponVolume); - FireInstance.Play(); - double Rnd = Math.random(); - AudioInstance HitInstance = new AudioInstance(Rnd < 0.5 ? "resources/EngineResources/audio/sounds/BulletHit1.ogg" : "resources/EngineResources/audio/sounds/BulletHit2.ogg","GunHitInstance" + packet.TargetID, engineInstance.audioManager(),fireResult.HitPoint.x, fireResult.HitPoint.y, fireResult.HitPoint.z, false); - HitInstance.SetAudioType(AudioInstance.AudioType.WEAPONS); - HitInstance.SetVolume(EngineConfig.getInstance().WeaponVolume * 10f); - HitInstance.Play(); - break; - } - } - } - } - - public static int ServerPort = 25565; public ClientConnectionThread(){ Connected = true; @@ -293,123 +45,17 @@ public class ClientConnectionThread implements Runnable{ //e.printStackTrace(); } } - public static void SetServerIP(String ServerIP, Thread serverThread){ - if(Connected){ - Connected = false; - serverThread.interrupt(); - ClientConnectionThread.ServerIP = ServerIP; - PrimaryRuntime.ServerCon = new ClientConnectionThread(); - serverThread = new Thread(PrimaryRuntime.ServerCon); - serverThread.start(); - } - } - - public static void RequestPlayerCount(){ - Packet packet = new Packet(Packet.PACKET_SEND_PLAYER_COUNT); - packet.SetTargetType((byte) 0); - packet.SetData(new byte[]{0}); - packet.SetID("NULL"); - OutGoingPacketQueue.add(packet); - } - - public static void FireWeapon(String ActorID, float Damage){ - Packet packet = new Packet(Packet.PACKET_FIRE_WEAPON); - packet.SetTargetType((byte) 0); - packet.SetData(ByteBuffer.allocate(4).putFloat(Damage).array()); - packet.SetID(ActorID); - OutGoingPacketQueue.add(packet); - } - - public static void UpdateEntityModelID(String ActorID, String ModelID){ - Packet packet = new Packet(Packet.PACKET_UPDATE_MODEL_ID); - packet.SetTargetType((byte) 0); - packet.SetData(ModelID.getBytes(StandardCharsets.UTF_8)); - packet.SetID(ActorID); - OutGoingPacketQueue.add(packet); - Logger.debug("Sent model ID update packet for actor [{}]", ActorID); - } - - public static void SendEntityUpdatePacket(Actor actor){ - Packet newOutgoingPacket = new Packet((byte)6); - newOutgoingPacket.SetTargetType((byte) 0); - RigidPhysicsController physicsController = (RigidPhysicsController) actor.GetPhysicsController(); - if(physicsController == null) return; - RigidBody rigidBody = RigidBody.RigidBodyRegister.get(physicsController.RigidBodyID); - if(rigidBody == null) return; - newOutgoingPacket.SetData(Packet.EncodeMovementData(rigidBody.Position,rigidBody.Rotation,rigidBody.LinearVelocity,rigidBody.AngularVelocity)); - newOutgoingPacket.SetID(actor.GetID()); - OutGoingPacketQueue.add(newOutgoingPacket); - } - - public static int readPacket(DataInputStream in) throws IOException { - if(in == null) return 0; - - Packet newIncomingPacket = new Packet(in.readByte()); - if(newIncomingPacket.PacketTypeByte == 5) { - return 5; - } - - newIncomingPacket.SetTargetType(in.readByte()); - - int DataLength = in.readInt(); - byte[] IncomingData = new byte[DataLength]; - in.readFully(IncomingData); - newIncomingPacket.Data = IncomingData; - - int IDLength = in.readInt(); - byte[] IDData = new byte[IDLength]; - in.readFully(IDData); - - String ID = new String(IDData, StandardCharsets.UTF_8); - newIncomingPacket.SetID(ID); - - IncomingPacketQueue.add(newIncomingPacket); - return 0; - } - - public static void WritePacket(Packet outPacket, DataOutputStream Outgoing) throws IOException { - if(Outgoing == null ) return; - if(outPacket.PacketTypeByte == Packet.PACKET_UPDATE_MODEL_ID){ - Logger.debug("Sending model ID update packet for actor [{}]", outPacket.TargetID); - } - byte[] DataToSend = Packet.GetOutgoingData(outPacket); - Outgoing.write(DataToSend); - } - - public static void FireWeapon(Vector3f barrelLocalOffset, float damage, float maxRange, Camera camera, String ShooterID){ - Vector3f camRotation = camera.GetRotation(); - Quaternionf aimRotation = new Quaternionf().rotateYXZ(-camRotation.y, -camRotation.x, camRotation.z); - - Vector3f direction = aimRotation.transform(new Vector3f(0, 0, -1)); - Vector3f origin = new Vector3f(camera.GetPosition()); - /// .add(aimRotation.transform(new Vector3f(barrelLocalOffset), new Vector3f())); - System.out.println("Fire Packet being sent" ); - Packet packet = new Packet(Packet.PACKET_FIRE_WEAPON); - packet.SetID(ShooterID); - packet.SetData(Packet.EncodeFireRequest(origin, direction, damage, maxRange)); - ClientConnectionThread.OutGoingPacketQueue.add(packet); - } @Override public void run() { try { + SetReconnectingStatus(false); outToServer = new DataOutputStream(SocketToServer.getOutputStream()); in = new DataInputStream(SocketToServer.getInputStream()); Connected = true; - while(Connected) { - int PacketRead = 0; - - try { - PacketRead = readPacket(in); - } catch (SocketTimeoutException ignored) { - - } - - if(PacketRead == Packet.PACKET_PING){ - WritePacket(new Packet(Packet.PACKET_PING),outToServer); - } - - if(PacketRead == -1) break; + SendNamePacket(); + Logger.debug("Connected!"); + while(Connected && !ClientSideNetworkUtils.IsReconnecting()) { if(!OutGoingPacketQueue.isEmpty()){ Packet outgoingPacket; @@ -417,18 +63,34 @@ public class ClientConnectionThread implements Runnable{ WritePacket(outgoingPacket,outToServer); } } - } - System.out.println("Connection closed"); - Connected = false; - if(!EngineThread.running) return; - if (!pinging) { - PrimaryRuntime.StartPingTimer(); + int PacketRead = 0; + + try { + PacketRead = readPacket(in); + } catch (SocketTimeoutException ignored) { + + } + if(PacketRead == Packet.PACKET_PING){ + WritePacket(new Packet(Packet.PACKET_PING),outToServer); + } + + if(PacketRead == -1) break; + } + if(!ClientSideNetworkUtils.IsReconnecting()){ + Logger.debug("Connection closed"); + Connected = false; + if (!EngineThread.running) return; + if (!pinging) { + PrimaryRuntime.StartPingTimer(); + } } SocketToServer.close(); - } catch (Exception e) { //e.printStackTrace(); + Logger.error("Connection closed due to exception [{}]",e.getMessage()); + System.out.println("Connection closed due to exception: "+ e.getMessage()); + e.printStackTrace(); Connected = false; ServerMessage = "Offline"; if(!EngineThread.running) return; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/EngineThread.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/EngineThread.java index 6a511b1..1a5ad07 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/EngineThread.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/EngineThread.java @@ -6,11 +6,12 @@ import net.halbear.Terrain4J.EngineCore.Logic.GameLogic; import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; import org.tinylog.Logger; -public class EngineThread implements Runnable{ +public class EngineThread implements IEngineThread{ public boolean CappedToTickRate; public int TickRate; public double TickThreshold = 0; public static boolean running = true; + public boolean internalRunning = true; public final GameLogic gameLogic; public int Frames = 0; public int TickFrames = 0; @@ -21,7 +22,8 @@ public class EngineThread implements Runnable{ public String ThreadName; public void KillThread(){ - running = false; + Logger.debug("Killing Single Thread: " + ThreadName); + internalRunning = false; } public void cleanup(){ @@ -44,6 +46,7 @@ public class EngineThread implements Runnable{ Logger.debug("Starting {} Thread",ThreadName); EngineThread = new Thread(this); EngineThread.setName("Terrain4J "+ThreadName+" Engine Thread"); + EngineThread.setDaemon(true); } public void UpdateFrameAccuracy(){ @@ -77,7 +80,7 @@ public class EngineThread implements Runnable{ Logger.debug("{} Thread Started",ThreadName); EngineAccuracy = EngineConfig.getInstance().getAccuracy(); OriginalAccuracy = EngineAccuracy; - while (running && !PrimaryRuntime.CanClose){ + while (running && !PrimaryRuntime.CanClose && internalRunning && !Thread.currentThread().isInterrupted()){ long now = System.nanoTime(); FrameTimes[0] = now - InitialTime; FrameTimes[1] += FrameTimes[0]; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/IEngineThread.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/IEngineThread.java new file mode 100644 index 0000000..78f71c1 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/IEngineThread.java @@ -0,0 +1,23 @@ +package net.halbear.Terrain4J.EngineCore.Threads; + +import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; +import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; +import net.halbear.Terrain4J.EngineCore.Logic.GameLogic; +import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; +import org.tinylog.Logger; + +public interface IEngineThread extends Runnable{ + public static void KillAllThreads(){ + EngineThread.running = false; + } + public void KillThread(); + public void cleanup(); + public Thread FetchThread(); + public void StartThread(); + public void UpdateFrameAccuracy(); + public void TickEvent(long nsTimeDiff); + public void FrameEvent(long now, long InitialTime); + public void CycleEvent(); + public void SecondEvent(); + public void run() ; +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/InstancedPhysicsThread.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/InstancedPhysicsThread.java index 840d3a1..839cdc8 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/InstancedPhysicsThread.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/InstancedPhysicsThread.java @@ -1,13 +1,17 @@ package net.halbear.Terrain4J.EngineCore.Threads; +import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; import org.tinylog.Logger; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; + import static net.halbear.Terrain4J.EngineCore.Logic.Physics.WorldPhysicsManager.ActiveControllers; import static net.halbear.Terrain4J.EngineCore.Logic.Physics.WorldPhysicsManager.PhysicsObjects; -public class InstancedPhysicsThread implements Runnable{ +public class InstancedPhysicsThread extends VirtualEngineThread{ public static boolean running = true; - public final Thread EngineThread; + public Thread EngineThread; public static float FixedTimeStep = 1f / 60f; public static int PhysicsTick = 0; public static int MaxSubStepsPerFrame = 8; @@ -17,21 +21,17 @@ public class InstancedPhysicsThread implements Runnable{ public String ThreadName; public int Index; public int Total; + public static final Executor executor = Executors.newVirtualThreadPerTaskExecutor(); public Thread FetchThread(){ return EngineThread; } - public InstancedPhysicsThread StartThread(){ - EngineThread.start(); - return this; - } - public InstancedPhysicsThread(String ThreadName, int Index, int TotalCount){ + super(ThreadName); this.ThreadName = ThreadName; Logger.debug("Starting {} Thread",ThreadName); - EngineThread = new Thread(this); - EngineThread.setName("Terrain4J "+ThreadName+" Engine Thread"); + this.Index = Index; this.Total = TotalCount; } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/NIO_ClientConnectionThread.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/NIO_ClientConnectionThread.java new file mode 100644 index 0000000..c3e9157 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/NIO_ClientConnectionThread.java @@ -0,0 +1,40 @@ +package net.halbear.Terrain4J.EngineCore.Threads; + +import java.nio.ByteBuffer; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.SocketChannel; +import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; + +public class NIO_ClientConnectionThread implements Runnable { + private final ByteBuffer InBound = ByteBuffer.allocateDirect(4096); + private final Queue OutBoundQueue = new ConcurrentLinkedQueue<>(); + + private final String ServerIP; + private final int ServerPort; + + private final Thread NetworkThread; + + private Selector Selector; + private SocketChannel ClientChannel; + private SelectionKey ChannelKey; + + public NIO_ClientConnectionThread(String ServerAddress, int ServerPort) { + this.ServerIP = ServerAddress; + this.ServerPort = ServerPort; + + NetworkThread = new Thread(this); + NetworkThread.setName("Terrain4J Client Network Thread"); + NetworkThread.setDaemon(true); + } + + public void start() { + NetworkThread.start(); + } + + @Override + public void run() { + + } +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/RenderThread.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/RenderThread.java index 61be6e3..a562f72 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/RenderThread.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/RenderThread.java @@ -1,65 +1,98 @@ package net.halbear.Terrain4J.EngineCore.Threads; -import net.halbear.Terrain4J.EngineCore.Display.Render; +import net.halbear.Terrain4J.EngineCore.Display.OpenGLRenderer; +import net.halbear.Terrain4J.EngineCore.Display.Renderer; +import net.halbear.Terrain4J.EngineCore.Display.VulkanRenderer; import net.halbear.Terrain4J.EngineCore.Display.Window; import net.halbear.Terrain4J.EngineCore.Logic.*; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; import net.halbear.Terrain4J.EngineCore.Profiling.GPUProfiler; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.DeferredSceneRender; +import net.halbear.Terrain4J.EngineCore.RenderingAPI.Vulkan.Structure.DisplayToScreen.DeferredSceneRender; import org.tinylog.Logger; import java.util.List; public class RenderThread extends EngineThread { - private Render render; - private Window window; + private Renderer render; private final InitData initData; public static int VulkanCrashCount = 0; public static boolean Headless = false; - public RenderThread(Window window, EngineInstance engineInstance, InitData initData, GameLogic appLogic) { + public RenderThread(EngineInstance engineInstance, InitData initData, GameLogic appLogic) { //this.window = window; - if(!Headless)render = new Render(engineInstance); + if(!Headless){ + switch (engineInstance.window().GetLinkedApi()){ + case Vulkan -> render = new VulkanRenderer(engineInstance); + case OpenGL -> render = new OpenGLRenderer(engineInstance); + } + } super(engineInstance,appLogic,"Render"); this.initData = initData; if(Headless) return; render.Initialise(initData); } + public InitData GetInitData(){return initData;} + public void RestartCrashedRenderer(){ if(Headless) return; if(VulkanCrashCount < EngineConfig.getInstance().GetMaxVulkanCrashes()){ RefreshRenderer(); VulkanCrashCount++; }else{ - Logger.error("MAX VULKAN CRASHES REACHED, CLOSING SOFTWARE"); + Logger.error("MAX API CRASHES REACHED, CLOSING SOFTWARE"); PrimaryRuntime.GetEngineInstance().window().setShouldClose(); PrimaryRuntime.CloseRuntime(); } } - public Render GetRenderer(){return render;} + public Renderer GetRenderer(){return render;} @Override public void TickEvent(long nsTimeDiff){ } + private static boolean AllowRendering = true; + public static synchronized void AllowRender(boolean allowRendering){ + AllowRendering = allowRendering; + } + public static synchronized boolean AllowRender(){return AllowRendering;} @Override - public void FrameEvent(long now, long InitialTime){ - gameLogic.RenderThreadInput(PrimaryRuntime.GetEngineInstance(), (now-InitialTime)); - if(Headless) return; - render.render(PrimaryRuntime.GetEngineInstance()); + public void FrameEvent(long now, long InitialTime) { + if (AllowRendering) { + gameLogic.RenderThreadInput(PrimaryRuntime.GetEngineInstance(), (now - InitialTime)); + if (Headless) return; + render.render(PrimaryRuntime.GetEngineInstance()); + } } @Override public void CycleEvent(){ } - public void RefreshRenderer(){ + public synchronized void BeginNewRenderer(){ + EngineInstance engineInstance = PrimaryRuntime.GetEngineInstance(); + switch (engineInstance.window().GetLinkedApi()){ + case Vulkan -> render = new VulkanRenderer(engineInstance); + case OpenGL -> render = new OpenGLRenderer(engineInstance); + } + render.Initialise(initData); + } + + public synchronized void RemoveRenderer(){ + Logger.debug("Removing Renderer"); + render.cleanup(); + } + + public synchronized void RefreshRenderer(){ if(Headless) return; Logger.debug("REFRESHING RENDERER"); render.cleanup(); - render = new Render(PrimaryRuntime.GetEngineInstance()); + EngineInstance engineInstance = PrimaryRuntime.GetEngineInstance(); + switch (engineInstance.window().GetLinkedApi()){ + case Vulkan -> render = new VulkanRenderer(engineInstance); + case OpenGL -> render = new OpenGLRenderer(engineInstance); + } render.Initialise(initData); } @@ -69,8 +102,10 @@ public class RenderThread extends EngineThread { EngineConfig.TPS_RENDERTHREAD = TickFrames; if(Headless) return; EngineConfig.LAST_AVERAGE_GPU_TIME = DeferredSceneRender.GetGPUTimeNS(); - List Profiling =GPUProfiler.GetVramUsage(render.GetVulkanContext().GetPhysicalDevice().GetPhysicalDevice()); - EngineConfig.getInstance().SetMemoryProfiling(Profiling); + if(render.GetVulkanContext() != null) { + List Profiling = GPUProfiler.GetVramUsage(render.GetVulkanContext().GetPhysicalDevice().GetPhysicalDevice()); + EngineConfig.getInstance().SetMemoryProfiling(Profiling); + } if(render.GetCurrentAAMode() != EngineConfig.getInstance().RenderAAType() || render.GetDeferred() != EngineConfig.getInstance().DeferredRendering()){ RefreshRenderer(); } @@ -79,7 +114,11 @@ public class RenderThread extends EngineThread { @Override public void cleanup() { - if(render != null)render.cleanup(); + Logger.debug("Cleaning up Renderer, Thread: [{}]",Thread.currentThread().toString()); + if(render != null){ + render.cleanup(); + render = null; + } PrimaryRuntime.ThreadsOpen--; Logger.debug("Closing Render Thread, Thread: [{}]",Thread.currentThread().toString()); diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/ServerConnectionThread.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/ServerConnectionThread.java index 92ccf51..8d7a24b 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/ServerConnectionThread.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/ServerConnectionThread.java @@ -2,35 +2,31 @@ package net.halbear.Terrain4J.EngineCore.Threads; import net.halbear.Executable.Server; import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.ConvexMesh; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidBody; -import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidPhysicsController; import net.halbear.Terrain4J.EngineCore.Main.GameCore; import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; import net.halbear.Terrain4J.EngineCore.Main.Scene.Actor; import net.halbear.Terrain4J.EngineCore.Main.Scene.IScene; import net.halbear.Terrain4J.EngineCore.Main.Scene.PlayerActor; -import net.halbear.Terrain4J.EngineCore.Main.Util.Maths.T4Raycast; import net.halbear.Terrain4J.EngineCore.ServerNetworking.Packet; -import org.joml.Quaternionf; -import org.joml.Vector3f; +import net.halbear.Terrain4J.EngineCore.ServerNetworking.ServerConnection; import org.tinylog.Logger; import java.io.*; import java.net.Socket; -import java.net.SocketTimeoutException; import java.nio.charset.StandardCharsets; import java.util.*; import java.util.concurrent.ConcurrentLinkedQueue; import static net.halbear.Executable.Server.ConnectedClients; -import static net.halbear.Terrain4J.EngineCore.Logic.Physics.WorldPhysicsManager.GetActorForRigidBody; +import static net.halbear.Executable.Server.LegacyRemoveClient; +import static net.halbear.Terrain4J.EngineCore.ServerNetworking.ServerSideNetworkUtils.*; -public class ServerConnectionThread implements Runnable{ - private String OwnedActorID; +@Deprecated +public class ServerConnectionThread implements Runnable, ServerConnection { + public String OwnedActorID; private final Socket clientSocket; - private final UUID ClientID; - private String PlayerDisplayName; + public final UUID ClientID; + public String PlayerDisplayName; public static int PlayersOnline = 0; public static int ServerPort = 25565; @@ -56,6 +52,26 @@ public class ServerConnectionThread implements Runnable{ this.OwnedActorID = ownedActorID; } + @Override + public void Clear() { + + } + + @Override + public void CleanUp() { + try { + clientSocket.close(); + } catch (IOException e) { + Logger.error("Failed to close client socket: " + e.getMessage()); + System.out.println("Failed to close client socket: " + e.getMessage()); + } + } + + @Override + public void ProcessIncomingPacket() { + + } + public ServerConnectionThread(Socket clientSocket) { UUID uuid = UUID.randomUUID(); ClientID = uuid; @@ -65,8 +81,8 @@ public class ServerConnectionThread implements Runnable{ } catch (IOException e) { throw new RuntimeException(e); } - - System.out.println("Connected to client: " + clientSocket.getInetAddress().getHostName()); + PrimaryRuntime.printLog("Client Connected: " + clientSocket.getInetAddress().getHostName()); + Logger.debug("Connected to client: " + clientSocket.getInetAddress().getHostName()); ConnectedClients.put(uuid, this); } @@ -85,6 +101,16 @@ public class ServerConnectionThread implements Runnable{ } } + @Override + public UUID GetInstanceUUID() { + return ClientID; + } + + @Override + public UUID GetClientUUID() { + return ClientID; + } + public void AddOutgoingPacket(Packet outgoingPacket){ OutgoingPacketQueue.add(outgoingPacket); } @@ -102,6 +128,8 @@ public class ServerConnectionThread implements Runnable{ } } + Server.ClientNames.forEach((client, name) -> AddOutgoingPacket(CreateUsernameUpdatePacket(client, name))); + GameCore gameCore = (GameCore) PrimaryRuntime.GetGameCore(); PlayerActor player = gameCore.SpawnNetworkPlayer(engineInstance, ClientID); @@ -110,14 +138,14 @@ public class ServerConnectionThread implements Runnable{ Packet playerCreatePacket = CreateActorPacket(player); if(playerCreatePacket != null) { AddOutgoingPacket(playerCreatePacket); - System.out.println("Queued direct create packet for joining player's actor: " + player.GetID()); + Logger.debug("Queued direct create packet for joining player's actor: " + player.GetID()); } BroadcastCreateActorPacket(player); SendPossessActorPacket(player.GetID()); - Packet UUIDUpdatePacket = CreatePlayerUUIDPacket(ClientID,this); + Packet UUIDUpdatePacket = LegacyCreatePlayerUUIDPacket(ClientID,this); Server.OutGoingPacketQueue.add(UUIDUpdatePacket); - System.out.println("Queued possess packet for joining player's actor: " + player.GetID()); + Logger.debug("Queued possess packet for joining player's actor: " + player.GetID()); } @Override @@ -129,13 +157,20 @@ public class ServerConnectionThread implements Runnable{ DataOutputStream out = new DataOutputStream(toClient); boolean Connected = true; InitialiseJoinedClient(); - while(Connected) { + while(Connected && !clientSocket.isClosed()) { + + if(!OutgoingPacketQueue.isEmpty()){ + Packet packet; + while((packet = OutgoingPacketQueue.poll()) != null) { + WritePacket(packet,out,this); + } + } + int PacketRead = 0; try { PacketRead = readPacket(in); - } catch (SocketTimeoutException ignored) { - // No incoming packet this moment. Continue so outgoing packets can still flush. + } catch (IOException _){ } if(PacketRead == Packet.PACKET_PING){ @@ -144,223 +179,41 @@ public class ServerConnectionThread implements Runnable{ if(PacketRead == -1) break; - if(!OutgoingPacketQueue.isEmpty()){ - Packet packet; - while((packet = OutgoingPacketQueue.poll()) != null) { - WritePacket(packet,out,this); - } - } + } + LegacyRemoveClient(this.ClientID); Packet PlayerCountPacket = CreatePlayerCountPacket(Server.ConnectedClients.size()); Server.OutGoingPacketQueue.add(PlayerCountPacket); - System.out.println("Connection Closing: " + Thread.currentThread() + "\n"); + Server.ClientNames.remove(this.ClientID); + Logger.debug("Connection Closing: " + Thread.currentThread() + "\n"); } catch (Exception e) { - System.out.println("Connection Closing: " + Thread.currentThread() + "\n"); + Logger.error("Connection Closing: " + Thread.currentThread() + "\n due to exception [{}]\n StackTrace: [{}]",e.getMessage(),e.getStackTrace() ); + System.out.println("Connection Closing: " + Thread.currentThread() + "\n due to exception [" + e.getMessage() +"]\n StackTrace:"); + e.printStackTrace(); + LegacyRemoveClient(this.ClientID); //throw new RuntimeException(e); } } - public static void ProcessClientPacket(Packet packet){ - ServerConnectionThread sender = ConnectedClients.get(packet.ClientID); - if(sender == null) return; - //System.out.println("Packet: " + packet.PacketTypeByte); - Actor Target = Actor.Actors.get(packet.TargetID); - if(Target == null - && packet.PacketTypeByte != Packet.PACKET_CREATE_ACTOR - && packet.PacketTypeByte != Packet.PACKET_PING) { - return; - } - - switch (packet.PacketTypeByte){ - case Packet.PACKET_UPDATE_LOCATION: - if(!sender.OwnsActor(packet.TargetID)) return; - Target.SetNewPosition(Packet.DecodeAsVector3f(packet.Data)); - break; - - case Packet.PACKET_UPDATE_ROTATION: - if(!sender.OwnsActor(packet.TargetID)) return; - Target.SetNewRotation(Packet.DecodeAsQuaternation(packet.Data)); - break; - - case Packet.PACKET_UPDATE_LINEAR_VELOCITY: - if(!sender.OwnsActor(packet.TargetID)) return; - Target.SetNewVelocity(Packet.DecodeAsVector3f(packet.Data)); - break; - - case Packet.PACKET_UPDATE_ANGULAR_VELOCITY: - if(!sender.OwnsActor(packet.TargetID)) return; - Target.SetNewAngularVelocity(Packet.DecodeAsVector3f(packet.Data)); - break; - - case Packet.PACKET_MOVEMENT_UPDATE: - if(!sender.OwnsActor(packet.TargetID)) return; - - Packet.DecodedMovementPacket movementUpdate = Packet.DecodeAsMovementUpdate(packet.Data); - Target.SetNewRotation(movementUpdate.Rotation); - Target.SetNewPosition(movementUpdate.Position); - Target.SetNewVelocity(movementUpdate.LinearVelocity); - Target.SetNewAngularVelocity(movementUpdate.AngularVelocity); - break; - - case Packet.PACKET_CLIENT_INPUT: - if(!sender.OwnsActor(packet.TargetID)) return; - //to be implemented later - break; - case Packet.PACKET_UPDATE_MODEL_ID: - if(!packet.TargetID.equals(ConnectedClients.get(packet.ClientID).OwnedActorID)) { - return; - } - Packet ReboundPacket = CreateUpdateModelIDPacket(packet.TargetID, Packet.DecodeAsString(packet.Data)); - Server.OutGoingPacketQueue.add(ReboundPacket); - break; - case Packet.PACKET_SEND_PLAYER_COUNT: - if(!packet.TargetID.equals("NULL")) { - return; - } - break; - case Packet.PACKET_FIRE_WEAPON: - HandleFireWeapon(packet); - break; - } - } - - private static void HandleFireWeapon(Packet packet){ - Packet.DecodedFireRequest request = Packet.DecodeAsFireRequest(packet.Data); - - Actor shooter = Actor.Actors.get(packet.TargetID); - String excludeBodyID = null; - if (shooter != null && shooter.GetPhysicsController() instanceof RigidPhysicsController rpc) { - excludeBodyID = rpc.RigidBodyID; - } - - T4Raycast.Hit hit = T4Raycast.Nearest(request.Origin, request.Direction, request.MaxRange, excludeBodyID); - boolean didHit = hit != null; - String hitActorID = ""; - Vector3f resultPoint; - - if (didHit) { - resultPoint = hit.Point; - Vector3f impulse = new Vector3f(request.Direction).normalize().mul(request.Damage); - hit.Body.ApplyImpulse(impulse, hit.Point); - Actor hitActor = GetActorForRigidBody(hit.Body); - if (hitActor != null) hitActorID = hitActor.GetID(); - } else { - resultPoint = new Vector3f(request.Direction).normalize().mul(request.MaxRange).add(request.Origin); - } - // Logger.debug("\n Raycast Result: " + hit + "\n Raycast Request: Origin->" + request.Origin + " | Direction->" + request.Direction + " | MaxRange->" + request.MaxRange + "\n Result point: " + resultPoint + "\n Hit Actor: " + hitActorID); - - Packet result = new Packet(Packet.PACKET_FIRE_RESULT); - result.SetID(hitActorID); - result.SetData(Packet.EncodeFireResult(request.Origin, resultPoint, didHit)); - Server.OutGoingPacketQueue.add(result); + public String getIP(){ + return this.clientSocket.getInetAddress().getHostAddress(); } public boolean OwnsActor(String actorID){ return OwnedActorID != null && OwnedActorID.equals(actorID); } - public static Packet CreatePlayerUUIDPacket(UUID clientID, ServerConnectionThread sender){ - System.out.println("Creating UUID packet for client: " + clientID); - Packet packet = new Packet(Packet.PACKET_ASSIGN_UUID); - packet.SetTargetType((byte) 0); - packet.SetData(clientID.toString().getBytes(StandardCharsets.UTF_8)); - packet.SetID("New Client"); - packet.ClientID = sender.ClientID; - return packet; - } - - public static Packet CreatePlayerCountPacket(int PlayerCount){ - Packet packet = new Packet(Packet.PACKET_SEND_PLAYER_COUNT); - packet.SetTargetType((byte) 0); - packet.SetData(Integer.toString(PlayerCount).getBytes(StandardCharsets.UTF_8)); - packet.SetID("New Client"); - return packet; - } - - public static Packet CreateActorPacket(Actor actor){ - Packet newOutgoingPacket = new Packet(Packet.PACKET_CREATE_ACTOR); - newOutgoingPacket.SetTargetType((byte) 0); - - RigidPhysicsController physicsController = (RigidPhysicsController) actor.GetPhysicsController(); - if(physicsController == null) return null; - - RigidBody rigidBody = RigidBody.RigidBodyRegister.get(physicsController.RigidBodyID); - if(rigidBody == null) return null; - - String actorType = actor instanceof PlayerActor ? "PlayerActor" : "Actor"; - StringBuilder OutgoingData = new StringBuilder(actorType) - .append(":") - .append(actor.GetModelID()); - - System.out.println("Creating actor packet: actorID=" + actor.GetID() + " modelID=" + actor.GetModelID() + " type=" + actorType); - - Vector3f Position = rigidBody.Position; - Quaternionf Rotation = rigidBody.Rotation; - Vector3f Scale = actor.GetScale(); - Vector3f ColliderBox = rigidBody.shape.hxhyhz; - float MassKG = rigidBody.MassKG; - Vector3f LinearVelocity = rigidBody.LinearVelocity; - Vector3f AngularVelocity = rigidBody.AngularVelocity; - Vector3f PositionOffset = actor.GetPositionOffset(); - - Vector3f CameraOffset = new Vector3f(); - if(actor instanceof PlayerActor playerActor) { - CameraOffset.set(playerActor.CameraOffset); - } - - float[] floats = new float[]{ - Position.x, Position.y, Position.z, - Rotation.x, Rotation.y, Rotation.z, Rotation.w, - Scale.x, Scale.y, Scale.z, - ColliderBox.x, ColliderBox.y, ColliderBox.z, - MassKG, - LinearVelocity.x, LinearVelocity.y, LinearVelocity.z, - AngularVelocity.x, AngularVelocity.y, AngularVelocity.z, - PositionOffset.x, PositionOffset.y, PositionOffset.z, - CameraOffset.x, CameraOffset.y, CameraOffset.z - }; - - for(int i = 0; i < floats.length; i++){ - OutgoingData.append(":").append(floats[i]); - } - - newOutgoingPacket.SetData(OutgoingData.toString().getBytes(StandardCharsets.UTF_8)); - newOutgoingPacket.SetID(actor.GetID()); - return newOutgoingPacket; - } - - public static void BroadcastCreateActorPacket(Actor actor) { - Packet newOutgoingPacket = CreateActorPacket(actor); - if(newOutgoingPacket != null)Server.OutGoingPacketQueue.add(newOutgoingPacket); - } - - public static Packet CreateUpdateModelIDPacket(String actorID, String NewModelID){ - Packet packet = new Packet(Packet.PACKET_UPDATE_MODEL_ID); - packet.SetTargetType((byte) 0); - packet.SetData(NewModelID.getBytes(StandardCharsets.UTF_8)); - packet.SetID(actorID); - return packet; - } - - public static Packet CreateDestroyActorPacket(String actorID){ - Packet packet = new Packet(Packet.PACKET_DESTROY_ACTOR); - packet.SetTargetType((byte) 0); - packet.SetData(new byte[0]); - packet.SetID(actorID); - return packet; - } - - public static void BroadcastDestroyActorPacket(String actorID){ - Server.OutGoingPacketQueue.add(CreateDestroyActorPacket(actorID)); - } public void DestroyOwnedActor(){ + Logger.debug("Creating Detsroy Actor Packet"); if(OwnedActorID == null) return; + Logger.debug("Actor to destroy verified"); Actor actor = Actor.Actors.get(OwnedActorID); if(actor != null){ + Logger.debug("Actor to destroy exists"); PrimaryRuntime.GetEngineInstance().scene().RemoveActor(actor); BroadcastDestroyActorPacket(OwnedActorID); } @@ -368,27 +221,13 @@ public class ServerConnectionThread implements Runnable{ OwnedActorID = null; } - public static void SendEntityUpdatePacket(Actor actor){ - Packet newOutgoingPacket = new Packet((byte)6); - newOutgoingPacket.SetTargetType((byte) 0); - RigidPhysicsController physicsController = (RigidPhysicsController) actor.GetPhysicsController(); - if(physicsController == null) return; - RigidBody rigidBody = RigidBody.RigidBodyRegister.get(physicsController.RigidBodyID); - if(rigidBody == null) return; - newOutgoingPacket.SetData(Packet.EncodeMovementData(rigidBody.Position,rigidBody.Rotation,rigidBody.LinearVelocity,rigidBody.AngularVelocity)); - newOutgoingPacket.SetID(actor.GetID()); - Server.OutGoingPacketQueue.add(newOutgoingPacket); - } + public int readPacket(DataInputStream in) throws IOException { if(in == null) return 0; Packet newIncomingPacket = new Packet(in.readByte()); - if(newIncomingPacket.PacketTypeByte == 5) { - return 5; - } - newIncomingPacket.SetTargetType(in.readByte()); int DataLength = in.readInt(); @@ -402,19 +241,25 @@ public class ServerConnectionThread implements Runnable{ String ID = new String(IDData, StandardCharsets.UTF_8); newIncomingPacket.SetID(ID); - newIncomingPacket.ClientID = ClientID; + newIncomingPacket.SessionUUID = ClientID; IncomingPacketQueue.add(newIncomingPacket); - return 0; + return newIncomingPacket.PacketTypeByte; } public static void WritePacket(Packet outPacket, DataOutputStream Outgoing, ServerConnectionThread client) throws IOException { - if(Outgoing == null || outPacket.PacketTypeByte == Packet.PACKET_ASSIGN_UUID && outPacket.ClientID != client.ClientID){ - System.out.println(outPacket.PacketTypeByte == Packet.PACKET_ASSIGN_UUID ? "Packet Client ID: " + outPacket.ClientID + " != " + client.ClientID : - "Packet not sent to client: " + outPacket.ClientID); + if(Outgoing == null || outPacket.PacketTypeByte == Packet.PACKET_ASSIGN_UUID && outPacket.SessionUUID != client.ClientID){ + if(Outgoing != null) { + Logger.debug(outPacket.PacketTypeByte == Packet.PACKET_ASSIGN_UUID ? "Packet Client ID: " + outPacket.SessionUUID + " != " + client.ClientID : + "Packet not sent to client: " + outPacket.SessionUUID); + return; + } + Logger.debug("Outgoing is NULL!!!!!"); return; } + // Logger.debug("Sending Packet of type [{}] to UUID [{}]",outPacket.PacketTypeByte,outPacket.SessionUUID); byte[] DataToSend = Packet.GetOutgoingData(outPacket); Outgoing.write(DataToSend); + Outgoing.flush(); } } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/ServerMultiClientConnectionThread.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/ServerMultiClientConnectionThread.java new file mode 100644 index 0000000..c1fe25a --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/ServerMultiClientConnectionThread.java @@ -0,0 +1,145 @@ +package net.halbear.Terrain4J.EngineCore.Threads; + +import net.halbear.Terrain4J.EngineCore.ServerNetworking.ClientSession; +import net.halbear.Terrain4J.EngineCore.ServerNetworking.IP_MODIFIER; +import net.halbear.Terrain4J.EngineCore.ServerNetworking.NetworkingUtil; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.SocketChannel; +import java.util.Iterator; +import java.util.Map; +import java.util.Queue; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedQueue; + +public class ServerMultiClientConnectionThread implements Runnable { + + private static final Map IP_STATUS_REGISTRY = new ConcurrentHashMap<>(); + private static final Map IP_STATUS_ALLOW_CONNECTION = new ConcurrentHashMap<>(); + + static { + IP_STATUS_REGISTRY.put("NOT_FOUND", IP_MODIFIER.Unreadable); + IP_STATUS_ALLOW_CONNECTION.put(IP_MODIFIER.Unreadable, false); + IP_STATUS_ALLOW_CONNECTION.put(IP_MODIFIER.Banned, false); + IP_STATUS_ALLOW_CONNECTION.put(IP_MODIFIER.Administrator, true); + IP_STATUS_ALLOW_CONNECTION.put(IP_MODIFIER.DontRead, true); + IP_STATUS_ALLOW_CONNECTION.put(IP_MODIFIER.RestrictedPermissions, true); + IP_STATUS_ALLOW_CONNECTION.put(IP_MODIFIER.Throttled, true); + IP_STATUS_ALLOW_CONNECTION.put(IP_MODIFIER.User, true); + } + + private boolean started = false; + + private final Selector selector; + private final Queue taskQueue = new ConcurrentLinkedQueue<>(); + private Thread ConnectionThread; + + public ServerMultiClientConnectionThread() throws IOException { + this.selector = Selector.open(); + ConnectionThread = new Thread(this); + ConnectionThread.setDaemon(true); + } + + public void Start() { + ConnectionThread.start(); + } + + public void acceptNewChannel(SocketChannel channel) { + if(!started) Start(); + String IPAddress = "NOT_FOUND"; + try { + IPAddress = NetworkingUtil.GetIPAddress(channel); + } catch (Exception ignored) { + } + IP_MODIFIER modifier = IP_STATUS_REGISTRY.getOrDefault(IPAddress, IP_MODIFIER.User); + if (IP_STATUS_ALLOW_CONNECTION.containsKey(modifier) && IP_STATUS_ALLOW_CONNECTION.get(modifier)) { + taskQueue.add(() -> { + try { + channel.configureBlocking(false); + SelectionKey key = channel.register(selector, SelectionKey.OP_READ); + key.attach(new ClientSession(channel, modifier, selector, key)); + } catch (IOException e) { + CloseChannel(channel); + } + }); + selector.wakeup(); + } + } + + private void CloseChannel(SocketChannel channel) { + try { + channel.close(); + } catch (IOException ignored) { + } + } + + private void Disconnect(SelectionKey key) { + ClientSession session = (ClientSession) key.attachment(); + if (session != null) { + session.CleanUp(); + } + key.cancel(); + } + + + public void WriteMiscPacket(SelectionKey key, byte[] data) { + ClientSession session = (ClientSession) key.attachment(); + if (session == null) return; + + taskQueue.add(() -> { + session.OutBound.add(ByteBuffer.wrap(data)); + key.interestOps(key.interestOps() | SelectionKey.OP_WRITE); + }); + selector.wakeup(); + } + + @Override + public void run() { + try { + while (!ConnectionThread.isInterrupted() && EngineThread.running) { + selector.select(); + + Runnable task; + while ((task = taskQueue.poll()) != null) { + task.run(); + } + + Iterator it = selector.selectedKeys().iterator(); + while (it.hasNext()) { + SelectionKey key = it.next(); + it.remove(); + + if (!key.isValid()) continue; + + if (key.isReadable()) { + ClientSession context = (ClientSession) key.attachment(); + SocketChannel channel = (SocketChannel) key.channel(); + int bytesRead = channel.read(context.InBound); + if (bytesRead == -1) { + key.cancel(); + channel.close(); + } else { + context.ProcessIncomingPacket(); + } + } + + if (key.isWritable()) { + ClientSession context = (ClientSession) key.attachment(); + try { + context.FlushOutboundData(key); + } catch (IOException e) { + key.cancel(); + key.channel().close(); + } + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/ServerSelectorMasterThread.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/ServerSelectorMasterThread.java new file mode 100644 index 0000000..e2de8a4 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/ServerSelectorMasterThread.java @@ -0,0 +1,87 @@ +package net.halbear.Terrain4J.EngineCore.Threads; + +import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; +import net.halbear.Terrain4J.EngineCore.ServerNetworking.ClientSession; +import net.halbear.Terrain4J.EngineCore.ServerNetworking.Packet; +import org.tinylog.Logger; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.ServerSocketChannel; +import java.nio.channels.SocketChannel; +import java.util.Iterator; +import java.util.concurrent.atomic.AtomicInteger; + +public class ServerSelectorMasterThread implements Runnable { + private static int PORT = 25565; + private static int TOTAL_THREADS = 9; + private static int CONNECTION_MANAGER_COUNT = TOTAL_THREADS - 1; + private static ServerMultiClientConnectionThread[] ConnectionManagers = new ServerMultiClientConnectionThread[CONNECTION_MANAGER_COUNT]; + Selector MasterSelector; + AtomicInteger ManagerIterator; + Thread acceptThread; + ServerSocketChannel serverChannel; + + public ServerSelectorMasterThread() { + acceptThread = new Thread(this); + acceptThread.setDaemon(true); + } + + @Override + public void run() { + try { + while (!acceptThread.isInterrupted() && EngineThread.running) { + MasterSelector.select(); + + Iterator it = MasterSelector.selectedKeys().iterator(); + + while (it.hasNext()) { + SelectionKey key = it.next(); + it.remove(); + + if (key.isAcceptable()) { + SocketChannel clientChannel = serverChannel.accept(); + clientChannel.configureBlocking(false); + + int index = Math.abs(ManagerIterator.getAndIncrement() % CONNECTION_MANAGER_COUNT); + ServerMultiClientConnectionThread targetWorker = ConnectionManagers[index]; + + targetWorker.acceptNewChannel(clientChannel); + } + } + } } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public void Initialise() throws IOException { + + PORT = EngineConfig.getInstance().GetServerPort(); + ConnectionManagers = new ServerMultiClientConnectionThread[CONNECTION_MANAGER_COUNT]; + + for(int i = 0; i < ConnectionManagers.length; i++){ + try{ + ConnectionManagers[i] = new ServerMultiClientConnectionThread(); + } catch (Exception e){ + Logger.error(e, "Failed to initialise connection manager number " + i); + System.out.println("Failed to initialise connection manager number " + i); + } + } + + MasterSelector = Selector.open(); + serverChannel = ServerSocketChannel.open(); + serverChannel.bind(new InetSocketAddress(PORT)); + serverChannel.configureBlocking(false); + serverChannel.register(MasterSelector, SelectionKey.OP_ACCEPT); + System.out.println("Boss started on port " + PORT + ". 7 Workers ready to scale to 128+ connections."); + + ManagerIterator = new AtomicInteger(0); + acceptThread.start(); + + VirtualEngineThread PendingProcessingThread = new VirtualEngineThread( "Terrain4J Server Pending Client Processing Thread"); + PendingProcessingThread.SetCycleEvent(ClientSession::QueryPendingClients); + PendingProcessingThread.StartThread(); + } +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/VirtualEngineThread.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/VirtualEngineThread.java new file mode 100644 index 0000000..e90dd75 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Threads/VirtualEngineThread.java @@ -0,0 +1,155 @@ +package net.halbear.Terrain4J.EngineCore.Threads; + +import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; +import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; +import net.halbear.Terrain4J.EngineCore.Logic.GameLogic; +import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime; +import org.tinylog.Logger; + +public class VirtualEngineThread implements IEngineThread{ + + @FunctionalInterface + public interface Action { + void execute(); + } + + public double TickThreshold = 0; + public boolean internalRunning = true; + public int Frames = 0; + public int TickFrames = 0; + public Thread VirtualEngineThread; + public long EngineAccuracy; + public long OriginalAccuracy; + public boolean Throttle; + public String ThreadName; + private Action TickEvent = new Action() { + @Override + public void execute() {} + }; + private Action FrameEvent = new Action() { + @Override + public void execute() {} + }; + private Action CycleEvent = new Action() { + @Override + public void execute() {} + }; + private Action SecondEvent = new Action() { + @Override + public void execute() {} + }; + + public void SetTickEvent(Action action){ + TickEvent = action; + } + + public void SetFrameEvent(Action action){ + FrameEvent = action; + } + public void SetSecondEvent(Action action){ + SecondEvent = action; + } + public void SetCycleEvent(Action action){ + CycleEvent = action; + } + + public void KillThread(){ + Logger.debug("Killing Single Thread: " + ThreadName); + internalRunning = false; + } + + public void cleanup(){ + // PrimaryRuntime.ThreadsOpen--; + Logger.debug("Closing "+ThreadName+" Virtual Engine Thread, Thread: [{}]",Thread.currentThread().toString()); + } + + public Thread FetchThread(){ + return VirtualEngineThread; + } + + public void StartThread(){ + VirtualEngineThread = Thread.ofVirtual().start(this); + VirtualEngineThread.setName("Terrain4J "+ThreadName+"Virtual Engine Thread"); + } + + public VirtualEngineThread(String ThreadName){ + this.ThreadName = ThreadName; + Logger.debug("Starting {} Virtual Engine Thread",ThreadName); + } + + public void UpdateFrameAccuracy(){ + Throttle = EngineConfig.getInstance().IsEngineThrottled(); + if(Throttle){ + EngineAccuracy = EngineConfig.getInstance().GetThrottleAccuracy(); + } else{ + EngineAccuracy= OriginalAccuracy; + } + } + + public void TickEvent(long nsTimeDiff){ + TickEvent.execute(); + } + public void FrameEvent(long now, long InitialTime){ + FrameEvent.execute(); + } + public void CycleEvent(){ + CycleEvent.execute(); + } + public void SecondEvent(){ + SecondEvent.execute(); + } + + @Override + public void run() { + //PrimaryRuntime.ThreadsOpen++; + long InitialTime = System.nanoTime(); + long updateTime = InitialTime; + double[] FrameTimes = new double[]{0,0,0,0}; + Logger.debug("{} Thread Started",ThreadName); + EngineAccuracy = EngineConfig.getInstance().getAccuracy(); + OriginalAccuracy = EngineAccuracy; + while (EngineThread.running && !PrimaryRuntime.CanClose && internalRunning && !Thread.currentThread().isInterrupted()){ + long now = System.nanoTime(); + FrameTimes[0] = now - InitialTime; + FrameTimes[1] += FrameTimes[0]; + FrameTimes[2] += FrameTimes[0]; + FrameTimes[3] += FrameTimes[0]; + CycleEvent(); + if (FrameTimes[1] >= EngineAccuracy){ + FrameEvent(now, InitialTime); + Frames++; + if (FrameTimes[2] >= TickThreshold) { + TickFrames++; + long nsTimeDiff = now - updateTime; + TickEvent(nsTimeDiff); + updateTime = now; + FrameTimes[2] = 0; + } + if (FrameTimes[3] >= 1000000000L){ + FrameTimes[3] = 0; + SecondEvent(); + Frames = 0; + TickFrames = 0; + } + FrameTimes[1] = 0; + } + if(Throttle) { + long endTime = System.nanoTime(); + long LoopFrameDiff = endTime - now; + long sleepTime = ((EngineAccuracy - LoopFrameDiff) / 1000000); + + if (sleepTime > 0) { + try { + Thread.sleep(sleepTime); + } catch (InterruptedException e) { + Logger.error("Thread Sleep Exception [{}]", e); + Thread.currentThread().interrupt(); + break; + } + } + } + InitialTime = now; + } + cleanup(); + } +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/PushConstantsRange.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/PushConstantsRange.java deleted file mode 100644 index cb8a562..0000000 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/PushConstantsRange.java +++ /dev/null @@ -1,4 +0,0 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline; - -public record PushConstantsRange(int Stage, int Offset, int Size) { -} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/VulkanMaterial.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/VulkanMaterial.java deleted file mode 100644 index 384e1fa..0000000 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/VulkanMaterial.java +++ /dev/null @@ -1,4 +0,0 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel; - -public record VulkanMaterial(String ID, boolean HasTransparency) { -} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DisplayToScreen/SceneRenderer.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DisplayToScreen/SceneRenderer.java deleted file mode 100644 index 217b6f8..0000000 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DisplayToScreen/SceneRenderer.java +++ /dev/null @@ -1,27 +0,0 @@ -package net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen; - -import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; -import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.DeferredRendering.MultiRenderTargetAttachments; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.Attachment; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.TextureCache; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Pipeline; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.DescriptorSetLayout; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.ShaderModule; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.MaterialsCache; -import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.ModelsCache; -import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer; -import org.lwjgl.vulkan.VkClearValue; -import org.lwjgl.vulkan.VkCommandBuffer; -import org.lwjgl.vulkan.VkRenderingAttachmentInfo; - -public interface SceneRenderer { - - public void Render(EngineInstance engineInstance, VulkanContext vulkanContext, CommandBuffer commandBuffer, ModelsCache modelsCache, MaterialsCache materialsCache, int CurrentFrame); - public void Resize(EngineInstance instance, VulkanContext VkCtx); - public void LoadMaterials(VulkanContext VkCtx, MaterialsCache materialsCache, TextureCache textureCache); - public void cleanup(VulkanContext VkCtx); - public MultiRenderTargetAttachments GetMRTAttachments(); - public Attachment GetAttachmentColour(); - public void RebuildPipelines(VulkanContext VkCtx); -} diff --git a/src/main/resources/DefaultEngineConfig.properties b/src/main/resources/DefaultEngineConfig.properties index cb2db50..5a5fdc2 100644 --- a/src/main/resources/DefaultEngineConfig.properties +++ b/src/main/resources/DefaultEngineConfig.properties @@ -3,15 +3,19 @@ Software_Title=Terrain4J Game Engine Software_Icon=ProgramIcon.png Software_Icon_Path=/WindowResources/Icon/ +LoadingScreenLocation=resources/EngineResources/Texture/Terrain4JTitleImage.png #Launch Window dimensions display_height=480 display_width=640 - +#Multiplayer Settings +user_display_name=player +server_ip=localhost +server_port=25565 #Engine Core Settings #the precision of frames, set this to 16000000, and it will limit the whole engine to 64FPS frame_accuracy=0 -throttle_on_unfocus=true -throttle_accuracy=100000000 +throttle_on_unfocus=false +throttle_accuracy=4000000 #event tick rate for game process master_tick_rate=240 main_thread_tickrate=120 @@ -21,6 +25,20 @@ cap_main_to_tickrate=true cap_fast_to_tickrate=true #Renderer Properties +#this is for devices that can't render more than 64 textures +compatibility_mode=false +#Renderer Settings +#Rendering API to use, prefer Vulkan, but if 1.3 is not supported on device use OpenGL +#VULKAN = Vulkan Vk 1.3 +#OPENGL = OpenGL 4.1 +RenderingAPI=VULKAN +#0 = Forward rendering +#1 = Deferred rendering +Renderer=1 +ShadowMapSize=2048 +MaxAllowedVulkanCrashes=10 +AlphaToCoverage=false +DualPassRendering=false #AA settings #0=No AA #1=FXAA @@ -35,7 +53,7 @@ vkValidated=true vsync=false #Swap Chain Images RequestedImages=3 -DefaultTexturePath=resources/EngineResources/Texture/DefaultTexture.png +DefaultTexturePath=resources/EngineResources/Texture/NoTexture.png #This is the name of the GPU you want the engine to use PhysicalDeviceName= diff --git a/terrain4j.properties b/terrain4j.properties index 9a6a4aa..4224823 100644 --- a/terrain4j.properties +++ b/terrain4j.properties @@ -1,58 +1,39 @@ -#Application Properties -#Title that shows up on app window -Software_Title=Terrain4J Game Engine +#created new properties file +#Tue Aug 18 20:22:42 BST 2026 +AlphaToCoverage=false +Debug_Shaders=false +DefaultTexturePath=resources/EngineResources/Texture/NoTexture.png +DualPassRendering=false +LoadingScreenLocation=resources/EngineResources/Texture/Terrain4JTitleImage.png +MaxAllowedVulkanCrashes=10 +PhysicalDeviceName= +Renderer=1 +RenderingAPI=VULKAN +RequestedImages=3 +ShaderRecompiling=true +ShadowMapSize=2048 Software_Icon=ProgramIcon.png Software_Icon_Path=/WindowResources/Icon/ -LoadingScreenLocation=resources/EngineResources/Texture/Terrain4JTitleImage.png -#Launch Window dimensions +Software_Title=Terrain4J Game Engine +anti_alias_mode=0 +cap_fast_to_tickrate=true +cap_main_to_tickrate=true +cap_master_to_tickrate=true +compatibility_mode=false display_height=480 display_width=640 - -#Engine Core Settings -#the precision of frames, set this to 16000000, and it will limit the whole engine to 64FPS -frame_accuracy=0 -throttle_on_unfocus=false -throttle_accuracy=4000000 -#event tick rate for game process -master_tick_rate=240 -main_thread_tickrate=120 fast_thread_tickrate=240 -cap_master_to_tickrate=true -cap_main_to_tickrate=true -cap_fast_to_tickrate=true - -#Renderer Properties -#this is for devices that can't render more than 64 textures -compatibility_mode=false -#Renderer Settings -#0 = Forward rendering -#1 = Deferred rendering -Renderer=1 -ShadowMapSize=2048 -MaxAllowedVulkanCrashes=10 -AlphaToCoverage=false -DualPassRendering=false -#AA settings -#0=No AA -#1=FXAA -#2=MSAAx2 -#3=MSAAx4 -#4=MSAAx8 -anti_alias_mode=0 -Debug_Shaders = false -ShaderRecompiling = true -#Vulkan Debugging toggle +field_of_view=60.0f +frame_accuracy=0 +main_thread_tickrate=120 +master_tick_rate=240 +server=false +server_port=25565 +server_ip=localhost +throttle_accuracy=4000000 +throttle_on_unfocus=false +user_display_name=halbear vkValidated=true vsync=false -#Swap Chain Images -RequestedImages=3 -DefaultTexturePath=resources/EngineResources/Texture/NoTexture.png -#This is the name of the GPU you want the engine to use -PhysicalDeviceName= - -#3D Projection Properties -field_of_view=60.0f z_far_plane=0.1f z_near_plane=10000.0f - -